Python 中的字典提供了一种灵活的访问和组织数据的方式
- 字典是由很多值组成的集合
- 字典的索引可以是不同的数据类型,同样也不止是整数,也有字符串
- 字典的索引被称为“键”,键及键所关联的值叫键值对(类似于 Java 中的 Map 集合)
- 字典是另一种可变容器模型,且可存储任意类型对象。
- 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:
1 |
|
键一般是唯一的,如果键重复,最后的一个键值对会替换前面的键值对,值没有唯一性要求,如下:
1 |
|
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组,如下:
1 |
|
1. 访问字典数据
创建一个字典,并访问数据字典内容,以下字典的键是 ‘size’,’color’,’character’,这些键对应的值是‘big’,’white’,’gentle’ 访问字典的值通过方括号里面添加键就可以直接进行访问,例如:
1 |
|
同样的,字典也可以用整数作为键,和列表的索引类似,只是字典的值是任何整数类型都行,不必要从0开始,因为键值的数据类型是任意的,如下:
1 |
|
因为字典是不排序的,所以不能像列表那样切片。 如果访问字典中不存在的键,将导致 KeyError 出错信息。这很像列表的“越界” IndexError 出错信息。在交互式环境中输入以下代码,并注意显示的出错信息,因 为没有 ‘color’ 键:
1 |
|
2、修改字典元素
2.1 添加和更新字典数据
向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例:
1 |
|
2.2 删除字典元素
对字典元素的删除操作能单一删除也能将整个字典清空,显示的删除一个字典使用 del 命令“
1 |
|
以上打印语句这会引发一个异常,因为用 del 后的字典不再存在:
1 |
|
3、字典键的特性
字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。
两个重要的点需要记住:
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:
实例
1 |
|
2)键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行,如下实例:
1 |
|
4、字典的函数
4.1 len()
len() 方法计算字典元素个数(键的总个数)
1 |
|
4.2 str()
str() 方法输出字典中可以打印的字符串标识
1 |
|
4.3 type()
type() 方法返回输入的变量类型,如果变量是字典就返回字典类型
1 |
|
5、字典的方法
5.1 dict.clear()
删除字典内所有元素,clear() 方法没有任何返回值,实例如下:
1 |
|
5.2 dict.copy()
copy() 方法对字典进行复制
1 |
|
实例中 dict2 其实是 dict1 的引用,即别名,所以输出结果都是一致的,dict3 对父对象进行了深拷贝,深拷贝不会随dict1 修改而修改,子对象是浅拷贝所以随 dict1 的修改而修改,即赋值会随父对象的修改而修改,拷贝不会随父对象的修改而修改,以上结果输出如下:
1 |
|
5.3 dict.fromkeys()
创建一个新字典,以序列 seq 中元素做字典的键,val为字典所有键对应的初始值,该方法返回一个新的字典
fromkeys() 方法语法
1 |
|
实例:
1 |
|
执行结果返回一个新的字典,如果不指定值默认为None,以上结果输出结果为:
1 |
|
5.4 dict.get(key, default=None)
返回指定键的值,如果值不在字典中返回 default 值
get() 方法语法
1 |
|
实例:
1 |
|
以上结果输出为:
1 |
|
5.5 key in dict
如果键在字典dict里返回true,否则返回false
1 |
|
以上结果输出为:
1 |
|
5.6 dict.items()
item() 方法以列表返回可遍历的(键, 值) 元组数组
1 |
|
可遍历的元组数组举例:
1 |
|
以上结果输出为:
1 |
|
5.7 dict..keys()
返回一个迭代器,可以使用 list() 来转换为列表
keys()方法语法:
1 |
|
实例:
1 |
|
以上结果输出为:
1 |
|
由结果看出结果返回一个迭代对象,这时候我们可以使用 list 转换为列表:
1 |
|
5.8 dict..setdefault(key, default=None)
Python 字典 setdefault() 方法和 get() 方法类似, 如果 key 在 字典中,返回对应的值。如果不在字典中,则插入 key 及设置的默认值 default,并返回 default ,default 默认值为 None。
setdefault()方法语法:
1 |
|
实例:
1 |
|
以上结果输出为:
1 |
|
5.9 dict..update(dict2)
Python 字典 update() 函数把字典参数 dict2 的 key/value(键/值) 对更新到字典 dict 里。
语法:
1 |
|
实例:
1 |
|
以上结果输出为:
1 |
|
5.10 dict.values()
Python 字典 values() 方法返回一个迭代器,可以使用 list() 来转换为列表,列表为字典中的所有值。
1 |
|
以上结果输出为:
1 |
|
5.11 dict.pop(key[,default])
Python 字典 pop() 方法删除字典给定键 key 所对应的值,返回值为被删除的值。key 值必须给出。 否则,返回 default 值。
pop()方法语法:
1 |
|
实例:
1 |
|
以上结果输出为:
1 |
|
5.12 dict.popitem()
Python 字典 popitem() 方法随机返回一个键值对(key,value)形式,按照 LIFO(Last In First Out 后进先出法) 顺序规则,即最末尾的键值对。 如果字典已经为空,却调用了此方法,就报出KeyError异常。
实例:
1 |
|
以上结果输出为:
1 |
|
将字典清空:
1 |
|
结果输出为:
1 |
|
6、字典和列表
6.1 字典和列表差异
列表中的元素表项由于元素通过序列从 0 开始递增存放,所以列表中的表项是排序的,而字典的内容的表项是不排序的,如下例子就很好的说明列表和字典的区别:
1 |
|
由以上实例可以看出,当列表元素内容一致,顺序不同再对比内容时匹配不成功,同理字典值匹配成功,说明字典中元素内容不按顺序存放。
总结
本节给大家介绍了 Python 数据结构之字典的操作与使用,对 Python 工程师使用字典的一些基本知识提供了支撑。
参考:
http://www.pythondoc.com/pythontutorial3 https://www.runoob.com/python3/python3-dictionary.html