字典 - 映射类型¶
通过名称来访问值的数据结构称为映射(mapping),字典是 Python 中唯一的内置映射类型。字典是一种可变容器模型,且可存储任意类型对象。
字典的名称指出了这种数据结构的用途。普通图书适合按从头到尾的顺序阅读,这有点像 Python 中的列表。字典(日常生活中的字典和 Python 字典)旨在让你能够轻松地找到特定的单词(键),以获悉其定义(值)。
在很多情况下,使用字典都比使用列表更合适。字典的一些用途:
表示棋盘的状态,其中每个键都是由坐标组成的元组;
存储文件修改时间,其中的键为文件名;
数字电话/地址簿。
创建字典¶
可以用以下方式创建字典:
使用一对花括号将多个以逗号分隔的键: 值对括起来: {‘a’: 1, ‘b’: 2, ‘c’: 3}
使用内置函数 dict
字典由键及其相应的值组成,这种键-值对称为项(item)。字典中值的类型可以是任何值,没有限制。
Note
字典中的键必须是独一无二的,而且是不可变的(列表不可以用作键)。 当数字类型用作键时,1 和 1.0 可以索引到同一个值,但是请注意,由于计算机对于浮点数存储的只是近似值,因此将其用作字典键是不明智的。
>>> a = {1: 'a', 2: 'b'}
>>> a[1]
'a'
>>> a[1.0]
'a'
也可以使用函数 dict 从其他映射或键-值对序列创建字典。
>>> a = dict(one=1, two=2, three=3)
>>> b = {'one': 1, 'two': 2, 'three': 3}
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d = dict([('two', 2), ('one', 1), ('three', 3)])
>>> e = dict({'three': 3, 'one': 1, 'two': 2})
像函数 list 、tuple 和 str 一样,如果调用这个函数时没有提供任何实参,将返回一个空字典。
字典的基本操作¶
字典的基本行为在很多方面都类似于序列。
list(dict) 返回字典中所有键的列表
len(dict) 返回字典所有项(键-值对)的总数
dict[key] 返回与键 key 相关联的值,如果键 key 不存在则引发 KeyError
dict[key] = value 将值 value 关联到键 key
del dict[key] 删除键为 key 的项,如果键 key 不存在则引发 KeyError
key in dict 检查字典是否包含键为 key 的项,存在返回 True,否则返回 False
Note
相比于检查列表是否包含指定的值,检查字典是否包含指定的键的效率更高。数据结构越大,效率差距就越大。
虽然字典和列表有多个相同操作,但也有一些重要的不同之处。
自动添加:即便是字典中原本没有的键,也可以给它赋值,这将在字典中创建一个新项。
成员资格:表达式 k in dict 查找的是键而不是值。