Python 程序设计讲义(47):组合数据类型——字典类型:创建字典
Python 程序设计讲义(47):组合数据类型——字典类型:创建字典
目录
- Python 程序设计讲义(47):组合数据类型——字典类型:创建字典
- 一、字典的特征
- 二、创建字典
- 1、使用花括号创建字典
- 2、使用 dict() 函数创建字典
- (1)通过指定键值对创建字典
- (2)通过可迭代对象创建字典
- (3)通过映射函数zip()创建字典
在 Python
中,字典是常见的序列结构之一。字典与列表类似,也是可变序列,与列表不同的是,字典是无序的可变序列,保存的内容是以键值对
的形式存放的。
字典中的每个元素都包含两个部分:即键
和值
。键
和值
之间用冒号(:
)分隔,相邻两个元素用逗号分隔。所有元素放在一对花括号 ({}
) 中。
一、字典的特征
Python
字典具有如下特征:
(1)字典是一种可变的容器,可以存储任意类型的数据;
(2)字典中的每个数据都是用键(key)
进行索引,而不像序列可以用下标进行索引;
(3)字典中的数据没有先后关系,字典的存储是无序的;
(4)字典是 Python 中唯一的映射类型,采用键值对(key-value)
的形式存储数据。key
必须是不可变类型,如:数字、字符串、元组。
(5)字典的表示方式是以花括号({} )
括起来,以冒号(:)
分割的键值对,各键值对之间用逗号(,)
分隔开;
(6)字典的键一般是唯一的,如果重复最后的一个键值对会覆盖换前面的键值对。
二、创建字典
创建字典有两种方式:
1、使用花括号创建字典
使用花括号创建字典的语法格式如下:
d_name={key1:value1, key2:value2, ... ,keyn:valuen}
说明:
花括号内如果不包含键值对,则创建一个空字典。
例如:
d1={} #创建一个空字典
d2={"张静":25,"李刚":20,"王飞":25,"刘涛":22}
d3={1:"汉族",2:"回族",3:"朝鲜族",2:"蒙古族",2:"苗族"}
#如果出现重复的键,则最后一个键值对会覆盖前面所有重复的键值对,并且只保留最后一个键值对
print(d1)
print(type(d1))
print(d2)
print(type(d2))
print(d3)
print(type(d3))程序的运行结果为:
{}
<class 'dict'>
{'张静': 25, '李刚': 20, '王飞': 25, '刘涛': 22}
<class 'dict'>
{1: '汉族', 2: '苗族', 3: '朝鲜族'}
<class 'dict'>
2、使用 dict() 函数创建字典
使用 dict()
函数创建字典分为三种情况:
(1)通过指定键值对创建字典
其语法格式如下:
d_name=dict(key1=value1, key2=values, ..., keyn=valuen)
说明:
(1)此处的=为赋值语句,key只能是标识符,并且key不能加引号。
(2)key值不能重复,否则会报错。
例如:
d1=dict(张静=20,刘涛=22,马云云=27,赵强=25)
d2=dict(a1="汉族",a2="回族",a3="蒙古族",a4="朝鲜族",a5="苗族")
#d2=dict(a1="汉族",a2="回族",a3="蒙古族",a4="朝鲜族",a3="苗族")
print(d1)
print(d2)程序的运行结果为:
{'张静': 20, '刘涛': 22, '马云云': 27, '赵强': 25}
{'a1': '汉族', 'a2': '回族', 'a3': '蒙古族', 'a4': '朝鲜族', 'a5': '苗族'}
如果key
加引号,则会报错。
例如:
d1=dict("张静"=20,"刘涛"=22,"马云云"=27,"赵强"=25)
print(d1)程序的运行结果为:File "C:\Users\wgx58\PycharmProjects\PythonProject\hello.py", line 1d1=dict("张静"=20,"刘涛"=22,"马云云"=27,"赵强"=25)^^^^^
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
如果key
不是一个标识符,也会报错。
例如:
d2=dict(1="汉族",2="回族",3="蒙古族",4="朝鲜族",3="苗族")
print(d2)程序的运行结果为:File "C:\Users\wgx58\PycharmProjects\PythonProject\hello.py", line 3d2=dict(1="汉族",2="回族",3="蒙古族",4="朝鲜族",3="苗族")^^
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
这样也不行:
d12=dict((1,2)="汉族")
print(d2)程序的运行结果为:File "C:\Users\wgx58\PycharmProjects\PythonProject\hello.py", line 3d12=dict((1,2)="汉族")^^^^^^
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
如果key
出现重复值,也会报错:
例如:
d2=dict(a1="汉族",a2="回族",a3="蒙古族",a4="朝鲜族",a3="苗族")
print(d2)程序的运行结果为:File "C:\Users\wgx58\PycharmProjects\PythonProject\hello.py", line 1d2=dict(a1="汉族",a2="回族",a3="蒙古族",a4="朝鲜族",a3="苗族")^
SyntaxError: keyword argument repeated: a3
(2)通过可迭代对象创建字典
语法格式如下:
d_name=dict(iterable)
说明:
可迭代对象的元素必须是包含两个元素的可迭代对象。
例如:
l1=[[1,"汉族"],[2,"回族"],[3,"蒙古族"],[4,"朝鲜族"],[5,"苗族"]]
t1=((1,"汉族"),(2,"回族"),(3,"蒙古族"),(4,"朝鲜族"),(3,"苗族"))
d1=dict(l1)
d2=dict(t1)
print(d1)
print(d2)程序的运行结果为:
{1: '汉族', 2: '回族', 3: '蒙古族', 4: '朝鲜族', 5: '苗族'}
{1: '汉族', 2: '回族', 3: '苗族', 4: '朝鲜族'}
如果一个列表的元素不是包含两个元素可迭代对象,则使用dict()
函数转换时会报如下错误:
l1=[1,"汉族"]
d1=dict(l1)
print(d1)程序的运行结果为:
Traceback (most recent call last):File "C:\Users\wgx58\PycharmProjects\PythonProject\hello.py", line 2, in <module>d1=dict(l1)
TypeError: cannot convert dictionary update sequence element #0 to a sequence
(3)通过映射函数zip()创建字典
通过映射函数zip()
创建字典的语法格式如下:
d_name=dict(zip(iterable1, iterable2))说明:
(1)zip()函数将可迭代对象作为参数,将对象中对应的元素打包成若干个元组,
返回由这些元组组成的一个可迭代对象。并且zip()函数生成的可迭代对象一旦
被取出就没有了。即:zip()函数生成的可迭代对象只能被使用一次。
(2)zip()函数的参数中的两个可迭代对象的元素个数一般要相同。
如果iterable1中的元素个数与iterable2中的元素个数不相等时,
则匹配相同个数的元素。
例如:iterable1有5个元素,iterable2有4个元素,则匹配4个元素。
iterable1有3个元素,iterable2有5个元素,则匹配3个元素。
例如:
l1=[1,2,3,4,5]
l2=["汉族","回族","苗族","蒙古族","朝鲜族"]
d1=dict(zip(l1,l2))
print(d1)程序的运行结果为:
{1: '汉族', 2: '回族', 3: '苗族', 4: '蒙古族', 5: '朝鲜族'}
当iterable1
中的元素个数大于iterable2
中的元素个数时:
l1=[1,2,3,4,5,6,7]
l2=["汉族","回族","苗族","蒙古族","朝鲜族"]
d1=dict(zip(l1,l2))
print(d1)程序的运行结果为:
{1: '汉族', 2: '回族', 3: '苗族', 4: '蒙古族', 5: '朝鲜族'}
当iterable1
中的元素个数小于iterable2
中的元素个数时:
l1=[1,2,3]
l2=["汉族","回族","苗族","蒙古族","朝鲜族"]
d1=dict(zip(l1,l2))
print(d1)程序的运行结果为:
{1: '汉族', 2: '回族', 3: '苗族'}
zip()
函数生成的可迭代对象只能使用一次。
例如:
l1=[1,2,3,4,5]
l2=["汉族","回族","苗族","蒙古族","朝鲜族"]
zipobj=zip(l1,l2)
d1=dict(zipobj)
d2=dict(zipobj) #d2为空列表,因为zip()函数生成的可迭代对象已经被取出。
print(d1)
print(d2)程序的运行结果为:
{1: '汉族', 2: '回族', 3: '苗族', 4: '蒙古族', 5: '朝鲜族'}
{}