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'