Python 3 字典 ( Dictionary )
字典,又称 哈希表 是 key/value 对的集合
Python 字典是另一种可变容器模型,可以存储任意类型对象
Python 字典的每个键值对 ( key => value ) 用冒号 ( : ) 分割,每个对之间用逗号 ( , ) 分隔,整个字典包括在花括号( {} ) 中
d = {key1 : value1, key2 : value2 }
键必须是唯一的,且必须是不可变的,如字符串,数字或元组
值则不必唯一,可以取任何数据类型
下面是一些简单的的字典
dict1 = { 'Alice': 1024, 'Beth': '9102', 'Cecil': '3258' } dict1 = { 'abc': 456 }; dict2 = { 'abc': 123, 98.6: 37 };
访问字典里的值
把相应的键放入熟悉的方括弧,就能取得相应键的值了
>>> dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} >>> dict1['Name'] 'Zara' >>> dict1['Age'] 7
如果用字典里没有的键访问的数据,会抛出 KeyError 异常
>>> dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} >>> dict1['Bob'] Traceback (most recent call last): File "<pyshell#67>", line 1, in <module> dict1['Bob'] KeyError: 'Bob'
修改字典
向字典添加新内容的方法是增加新的键/值对
>>> dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} >>> dict1['Bob'] = 'Bob' >>> dict1['lang'] = 'zh-CN' >>> dict1 {'Bob': 'Bob', 'lang': 'zh-CN', 'Age': 7, 'Name': 'Zara', 'Class': 'First'} >>>
修改字典则直接对存在的键赋值即可
>>> dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} >>> dict1['Age'] = 99 >>> dict1 {'Age': 99, 'Name': 'Zara', 'Class': 'First'}
删除字典元素
del
语句可以删除字典中的元素,当然既能删单一的元素也能清空字典
>>> dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} >>> del dict1['Name'] >>> dict1 {'Age': 7, 'Class': 'First'} >>> del dict1 >>> dict1 Traceback (most recent call last): File "<pyshell#82>", line 1, in <module> dict1 NameError: name 'dict1' is not defined
使用 del
删除一个字典后,如果再访问就会抛出变量未定义异常
此外我们还可以使用 dict.clear()
函数清空字典
>>> dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} >>> dict1.clear() >>> dict1 {}
字典键的特性
字典中的值可以是任何对象,既可以是标准的对象,也可以是用户定义的,但键不行
字典中的键必须符合以下几点规则
-
不允许同一个键出现两次,创建时如果同一个键被赋值两次,后一个值会被记住
>>> dict1 = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'} >>> dict1 {'Age': 7, 'Name': 'Manni'} >>> dict1['Name'] 'Manni'
-
键必须不可变,可以用数字,字符串或元组充当,但不能使用列表
>>> dict = {['Name']: 'Zara', 'Age': 7}; Traceback (most recent call last): File "<pyshell#89>", line 1, in <module> dict = {['Name']: 'Zara', 'Age': 7}; TypeError: unhashable type: 'list'
Python 字典内置函数
下表列出了 Python 字典内置的函数
函数 | 描述 |
---|---|
cmp(dict1, dict2) | 比较两个字典元素 |
len(dict) | 计算字典元素个数,即键的总数 |
str(dict) | 输出字典可打印的字符串表示 |
type(variable) | 返回输入的变量类型,如果变量是字典就返回字典类型 |
Python 字典内置方法
下表列出了 Python 内置的方法
函数 | 描述 |
---|---|
dict.clear() | 删除字典内所有元素 |
dict.copy() | 返回一个字典的浅复制 |
dict.fromkeys(seq[, val])) | 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值 |
dict.get(key, default=None) | 返回指定键的值,如果值不在字典中返回default值 |
key in dict | 如果键在字典dict里返回true,否则返回false |
dict.items() | 以列表返回可遍历的(键, 值) 元组数组 |
dict.keys() | 以列表返回一个字典所有的键 |
dict.setdefault(key, default=None) | 和 get() 类似, 但如果键不存在于字典中,将会添加键并将值设为 default |
dict.update(dict2) | 把字典dict2的键/值对更新到dict里 |
dict.values() | 以列表返回字典中的所有值 |
pop(key[,default]) | 删除字典给定键 key 所对应的值,返回值为被删除的值。key 值必须给出。否则,返回 default 值 |
popitem() | 随机返回并删除字典中的一对键和值 |