字典(dict, dictionary的简写)是Python中另一个非常重要的内置数据类型,是Python中映射类型(Mapping Type),它把“键”(key)映射到“值”(value),通过key可以快速找到value,它是一种“键值对”(key-value)数据结构。
“键”,可以是任意不可变的类型对象(可以做hash,即具有hash()和eq()方法的对象),通常是字符串和数字,同一个字典中键是唯一的。但不能是list,因为list可以通过索引、切片、append()和extend()方法改变其值。
“值”,可以是任何类型的数据。
Python字典(dict)的创建
字典可以通过dict()或一对花括号创建一个空字典: d = {}。花括号内可以放用逗号,隔开的多个键值对,键值对用冒号:隔开:
上面最后一个例子d4的初始化中,键都是'a',所以得到的字典只有一个键,它的值是最后一次赋值3.
dict()创建字典对象
dict()无参数时生成空字典,也可以通过传入参数进行初始化。传入参数有两种形式:
一种是,序列型数据list或tuple,它每个元素必须又含有两个子元素,以满足key-value对;
一种是,name=value形式的参数。
见下面的例子:
字典推导式(Dict Comprehension)
类似列表推导式,我们可以通过一个for循环表达式来创建一个字典:
list不能做字典的key,但是可以做value:
Python字典(dict)的访问
(1)通过键访问其值
列表可以通过其索引访问元素,字典就是通过键访问对应的值,形式类似列表那样用方括号,只不过用“键”替代了“索引”。方法是字典对象名称加方括号括起来的键名,比如:mydict['a']。如果某个键不在字典对象中,通过方括号访问就会报错:
(2)通过get(key)方法访问其值
给get()传入键作为参数,就可以得到value,如果key不存在则返回None。
Python字典(dict)的更改
详见下面的示例代码:
Python字典(dict)相关的内置函数
Python内置了一些函数可以用于操作字典,它们是:
- len()
- 返回字典的长度,是键的个数,也是值的个数,也是键值对的个数。空字典的长度是0
- any()和all()
- 类似于对列表、tuple的操作,不过这两个函数检验的是字典的键(key)。
- any(): 只要字典有一个键为True则返回True;
- all(): 只有字典的所有键都为True才返回True;
不过,空字典有意思,它没有键却认为是所有键都为True,all({})返回True。
- sorted()
- 跟操作列表、tuple的效果一样,它把字典的所有key当做一个列表(或元组)进行排序
in 运算符
跟列表,元组一样,in用来检验一个key是不是在字典中:
Python字典(dict)的内置方法:
(1)keys()
返回键(key)的view对象(类型是:dict_keys)。这个view对象可以动态查看字典内部的对象,当字典改变后,这个view对象也会反应变化。
Python 2时,返回的是list,现在是dict_keys。
(2)values()
返回值(value)的view对象,dict_values。
(3)items()
返回键值对(key-value)的view对象:dict_items
(4)get(key)
获取key对应的value,上面已经讲到。
(5)clear()
清空一个字典
(6)copy()
在Python中,把列表,字典对象赋值给变量时,都是“浅拷贝”,即,变量指向了对象,原来的对象改变了,这个变量的值也会跟着变。而cop()函数是“深拷贝”,重新创造一个新对象赋值给变量,原来的对象的改变不影响新对象。
(7)pop(key)
删除key并返回它的值,上面已经讲到。
(8)popitem()
返回一对键值:
(9)fromkeys()
通过一个序列来初始化字典:
(10)update()
用一个字典来更新另一字典:
总结
字典是Python中很重要的一个数据结构,也是Python内置的数据类型。今后的编程中会经常用到它,所以要熟练掌握它的各种操作。
如果你觉得本文对你的学习有帮助的话,不妨点个关注呗。