Python的字典包含的元素是“键(key)-值(value)对”。列表和元组是以数字作为索引的,字典可以看作是用键作为索引的。
1 字典的定义
使用大括号或者dict()构造方法定义字典对象。
1.1 使用大括号定义字典对象
可以使用大括号来定义字典对象,字典中的“键值对”之间用冒号分隔,每个“键值对”用逗号分隔,代码如下所示:
>>> d1 = {'Mon':1, 'Tue':2, "Wed":3}
>>> type(d1)
<class 'dict'>
1.2 使用dict()构造方法定义字典对象
也可以使用dict()构造方法定义字典对象,代码如下所示:
>>> t1 = (('The',4),('Fri',5))
>>> type(t1)
<class 'tuple'>
>>> d2 = dict(t1)
>>> type(d2)
<class 'dict'>
>>> print(d2)
{'The': 4, 'Fri': 5}
其中,t1是嵌套了元组元素的元组,将其作为dict()构造方法的参数,创建变量d2,d2是字典对象,其包含的“键值对”即为嵌套的子元组包含的元素。
2 字典对象的“增删改查”
2.1 增加对象中的元素
在前面提到,字典可以看作是用键作为索引的。因此,可以之间用键的方式添加字典对象中的元素,代码如下所示:
>>> d2['Sat'] = 6
>>> print(d2)
{'The': 4, 'Fri': 5, 'Sat': 6}
以上代码中,通过中括号包围的键,为d2添加了一个键值对。
2.2 删除对象中的元素
与添加元素类型,可以通过键删除字典对象中的元素,代码如下所示:
>>> del d2['The']
>>> print(d2)
{'Fri': 5, 'Sat': 6}
在以上代码中,通过del()函数和键,删除了字典中的元素。
2.3 修改对象中的元素
可以通过键来修改字典对象中的元素,代码如下所示:
>>> d2['Fri'] = 7
>>> print(d2)
{'Fri': 7, 'Sat': 6}
2.4 查看对象中的元素
2.4.1 查看对象中的键
可以使用以下代码查看字典对象中的键:
>>> for key in ():
... print(key)
...
...
Fri
Sat
其中,通过字典对象key2调用了成员方法keys(),该方法返回的类型是“dict_keys”,其包含的元素即为字典中的键,最后通过for循环遍历键。
2.4.2 查看对象中的值
可以使用以下代码查看字典对象中的值:
>>> for value in ():
... print(value)
...
...
7
6
其中,通过字典对象key2调用了成员方法values(),该方法返回的类型是“dict_values”,其包含的元素即为字典中的值,最后通过for循环遍历键。
2.4.4 查看对象中的键值对
可以使用以下代码查看字典对象中的键值对:
>>> for item in ():
... print(item)
...
...
('Fri', 7)
('Sat', 6)
其中,通过字典对象key2调用了成员方法items(),该方法返回的类型是“dict_items”,其包含的元素即为字典中的键值对,最后通过for循环遍历键。
3 注意事项
3.1 字典对象的键必须是不可修改类型
Python中的不可修改类型包括数字、字符串和元组;可修改类型包括列表、集合和字典等。字典对象的键必须是不可修改类型。
>>> d3 = {1:'one', 2:'two', 3:'three'}
>>> d4 = {[1,]:'one'}
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
d4 = {[1,]:'one'}
TypeError: unhashable type: 'list'
其中,d3的键是数字,此时定义d3的代码是正确的。而定义d4的键是列表,因为列表是可修改类型,因此定义d4的代码报错,报错信息为“类型错误:列表是不可哈希类型”,不可哈希类型指的就是可修改类型。
3.2 字典对象中的键不能相同而值可以相同
>>> d4 = {1:'one', 2:'two', 3:'three', 4:'one'}
以上代码中,d4中有两个元素的值是“one”,此时代码正确。
>>> d5 = {1:'one', 2:'two', 3:'three', 1:'four'}
>>> print(d5)
{1: 'four', 2: 'two', 3: 'three'}
以上代码中,定义d5时,有两个元素的键是“1”,此时,后面的元素会覆盖前面的元素。