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