Python3 字典
字典是一种可变容器模型,可存储任意类型对象,是python的一种內置数据类型。字典在其他语言里可能会被叫做 联合内存 或 联合数组,字典的数据元素由键和键值组成的键值对构成。
字典的每个键都通过冒号(:)与其值分隔,每个键值对用逗号分隔,整个字典包括在花括号({})中。基本格式如下所示:
dict = {key1 : value1, key2 : value2 }
与以连续整数为索引的序列不同,字典是以键为索引的,因此键必须是唯一的。键可以是任意不可变类型,但键值则不必,键值可以取任何数据类型。一个简单的字典实例:
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
字典初始化
创建一个空字典:
dict={};
可以直接在花括号中放置一些以逗号分隔的键值对来创建字典,如:
dict1 = { 'abc': 456 };
dict2 = { 'abc': 123, 98.6: 37 };
可以直接用dict() 构造函数从键值对序列里创建字典,如:
print(dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]))
输出结果如下:
{'sape': 4139, 'guido': 4127, 'jack': 4098}
当键是简单字符串时,可以直接通过键参数来指定键值,如:
print(dict(sape=4139, guido=4127, jack=4098))
输出结果如下:
{'sape': 4139, 'guido': 4127, 'jack': 4098}
此外,字典推导式可以从任意的键值表达式中来创建字典,如一下用例:
print({x: x**2 for x in (2, 4, 6)})
输出结果如下:
{2: 4, 4: 16, 6: 36}
访问字典
对一个字典执行 list(dict)
将返回包含该字典中所有键按插入次序排列的列表。(如需其他排序,则要使用 sorted(dict)
)
如下示例:
dict = {'Name': 'W3CSchool', 'Age': 7, 'Class': 'First'};
print(list(dict));
输出结果如下:
['Age', 'Name', 'Class']
通常通过键来访问字典中对应的键值,把相应的键放入中括号([])中,如下实例:
dict = {'Name': 'W3CSchool', 'Age': 7, 'Class': 'First'}
print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])
以上实例输出结果:
dict['Name']: W3CSchool
dict['Age']: 7
如果访问字典中不存在的键,会输出错误,如下实例:
dict = {'Name': 'W3CSchool', 'Age': 7, 'Class': 'First'};
print ("dict['Alice']: ", dict['Alice'])
以上实例输出结果:
Traceback (most recent call last):
File "test.py", line 5, in <module>
print ("dict['Alice']: ", dict['Alice'])
KeyError: 'Alice'
可以通过字典内置方法in来判断键是否在字典中,示例如下:
tel = {'jack': 4098, 'sape': 4139};
print('jack' in tel);
print('sape' not in tel);
输出结果如下:
True
False
更新字典
更新字典元素的方法是增加新的键/值对,修改已有键/值对,如下实例:
dict = {'Name': 'W3CSchool', 'Age': 7, 'Class': 'First'}
dict['Age'] = 8; # 更新 Age
dict['School'] = "W3Cschool教程" # 添加一个键值对
print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])
以上实例输出结果:
dict['Age']: 8
dict['School']: W3Cschool教程
删除字典元素
能删单一的元素也能清空字典,清空只需一项操作。
显示删除一个字典用del命令,如下实例:
dict = {'Name': 'W3CSchool', 'Age': 7, 'Class': 'First'}
del dict['Name'] # 删除键 'Name'
dict.clear() # 删除字典中元素
del dict # 删除字典
print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])
但这会引发一个异常,因为执行del dict
操作后字典不再存在,程序出现如下错误:
Traceback (most recent call last):
File "test.py", line 5, in <module>
print ("dict['Age']: ", dict['Age'])
TypeError: 'type' object is not subscriptable
字典键的特性
字典中键值可以没有取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。
两个重要的点需要记住:
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例
dict = {'Name': 'W3CSchool', 'Age': 7, 'Name': '小菜鸟'}
print ("dict['Name']: ", dict['Name'])
以上实例输出结果:
dict['Name']: 小菜鸟
2)键可以是任意不可变类型,通常是字符串或数字。如果一个元组只包含字符串、数字或元组,那么这个元组也可以用作关键字。但如果元组直接或间接地包含了可变对象,那么它就不能用作关键字。列表不能用作关键字,因为列表可以通过索引、切片或 append()
和 extend()
之类的方法来改变。,如下实例:
dict = {['Name']: 'W3CSchool', 'Age': 7}
print ("dict['Name']: ", dict['Name'])
以上实例输出结果:
Traceback (most recent call last):
File "test.py", line 2, in <module>
dict = {['Name']: 'W3CSchool', 'Age': 7}
TypeError: unhashable type: 'list'