字典 - 映射类型

通过名称来访问值的数据结构称为映射(mapping),字典是 Python 中唯一的内置映射类型。字典是一种可变容器模型,且可存储任意类型对象。

字典的名称指出了这种数据结构的用途。普通图书适合按从头到尾的顺序阅读,这有点像 Python 中的列表。字典(日常生活中的字典和 Python 字典)旨在让你能够轻松地找到特定的单词(键),以获悉其定义(值)。

在很多情况下,使用字典都比使用列表更合适。字典的一些用途:

  • 表示棋盘的状态,其中每个键都是由坐标组成的元组;

  • 存储文件修改时间,其中的键为文件名;

  • 数字电话/地址簿。

创建字典

可以用以下方式创建字典:

  1. 使用一对花括号将多个以逗号分隔的键: 值对括起来: {‘a’: 1, ‘b’: 2, ‘c’: 3}

  2. 使用内置函数 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 查找的是键而不是值。