1、 dict简介:
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有查找速度快的特点。
1. 语法要求:
name = {‘key1’:vlaue1,’key2’:value2,……}
dict使用的是“{}”符号
优点:
相比list单一的存储特性,dict可以一次存储建和值,而list则需要分别建两个list,分两次查找,list越长耗时越多。
示例:
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
#直接根据key的值Michael,就能迅速找到95这个成绩。
2. dict的基本操作:
1) 将数据放入dict中:
>>> d['Adam'] = 67
>>> d['Adam']
67
2) 由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值占据掉:
>>> d['Jack'] = 90
>>> d['Jack']
90
>>> d['Jack'] = 88
>>> d['Jack']
88
3) 如果key不存在,dict就会报错:
>>> d['Thomas']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Thomas'
4) 要避免key不存在的错误,有两种办法,一是通过in判断key是否存在:
>>> 'Thomas' in d
False
5) 是通过dict提供的name.get方法,如果key不存在,可以返回None,或者自己指定的value:
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
注意:返回None的时候(也就是不存在的时候)Python的交互式命令行不显示结果的。
6) 要删除一个key,用name.pop(key)方法,对应的value也会从dict中删除:
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}
7) 优缺点比较:
请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。
这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。
要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key
8) Key的取值要求:
因此为了保证hash的正确性,作为key的对象就不能变,在python中,字符串、整数都是不可变量,因此可以作为key,但list这种可变的就不能作为key。
>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'