1. 字典dict的定义
字典在Python中是一种可变的容器模型,是通过一组键值对(key-value)组成的。
这种结构类型通常也被称为映射,或关联数组,或哈系表。
字典中的每个键值对用 “ :”分割,每个键值对之间用 逗号 “ ,”分割,整个字典包括在花括号“{ }”中.
格式:d = {key1:value1, key2:value2, key3:value3}
2. Python内置了字典,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
用python写一个dict如下:
>>> d = {'Bob': 95, 'Mary': 97}
>>> d['Mary']
97
我们可以发现,如果用dict实现,只需要一个名字和成绩的对照表,就可以直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。
3. 为什么dict的查找速度这么快?
(1)因为dict的实现原理和查字典是一样的,以字典举例来说,我们在查某个字的时候,会先在字典的索引表里查到这个字对应的页码,然后直接翻到这页找到这个字。
使用这样的方法,无论找哪个字,查找速度都会特别快,不会随着字典大小的增加而变慢。
(2)dict就是使用这样的方法来实现的,比如给定一个名字'Bob',dict就可以在内部直接算出'Bob'对应成绩的'页码',也就是存放成绩的内存地址,直接取出来,所以速度特别快。
这种key-value的存储方式,在放进去的时候,必须根据key算出value的存放位置,这样取的时候才能根据key直接取出value。
4. 键的不可变性
键必须不可变,所以可以使用数字、字符串或者元组,但是就不可以用列表。
值可以取任意的数据类型。
如下实例所示:
>>> d = {['Name']: 'Zara', 'Age': 7}
结果如下:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
5. 键的唯一性
键一般是唯一的,同一个键不允许出现两次。而如果重复最后的一个键值则会替换掉前面的,值不需要唯一。
由于1个key只能对应1个value,所以多次对1个key放入value,后面的值会把前面的值冲掉。
唯一性举例如下所示:
>>> dict = {'a': 1, 'b': 2, 'b': '3'}
>>> dict['b']
'3'
>>> dict
{'a': 1, 'b': '3'}
>>> dict = {'a': 1, 'b': 2}
>>> dict['b']
'2'
>>> dict['b'] = 3
>>> dict
{'a': 1, 'b': '3'}
6. 数据放入dict的方法
1. 初始化指定
d = {'Bob': 95, 'Mary': 97}
2. 通过key放入
d['Adam'] = 67
3. dict内部存放的顺序和key放入的顺序是没有关系的
7. 修改dict的方法
#!/usr/bin/python
d = {'Name': 'Marsa', 'Age': 6, 'Class': 'First'}
d['Age'] = 18 # 更新
d['School'] = "USTB" # 添加
print("d['Age']: ", d['Age'])
print("d['School']: ", d['School'])
输出结果:
d['Age']: 18
d['School']: USTB
8. key不存在,dict会报错
>>> d = {'Name': 'Marsa', 'Age': 6, 'Class': 'First'}
>>> d['Thomas']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Thomas'
避免key不存在这种错误的两种办法:
1. 通过in判断key是否存在
>>> 'Thomas' in d
False
2. 通过dict提供的get()方法
如果key不存在,可以返回None或者自己指定的value。注意: 返回None的时候Python的交互环境不显示结果。
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
9. 在dict中删除一个key
删除字典中的元素,可以删除单一的元素,也能清空字典。
显示删除一个字典用del命令。
eg: d = {'Bob': 95, 'Mary': 97}
>>> del d['Bob'] # 删除键是'Bob'的条目,删除一个key,对应的value也会从dict中删除
>>> d.clear() # 清空字典中的所有条目
>>> del d # 删除字典
也可以使用pop(key)方法,删除一个key,对应的value也会从dict中删除
使用pop方法删除字典给定键key所对应的值,返回值为被删除的值
eg: d = {'Bob': 95, 'Mary': 97}
>>> d.pop('Bob')
95
>>> d
{'Mary': 97}
10. dict和list的比较
dict的特点:
(1)查找和插入的速度极快,不会随着key的增加而变慢
(2)dict是用空间来换取时间的一种方法,需要占用大量的内存,内存浪费多
list的特点:
(1)查找和插入的速度随着元素的增多而变慢
(2)占用的空间比较小,内存浪费少
11. Python字典内置函数及方法