HOWTO · Python
在 Python 中声明一个字典
本教程演示如何在 Python 中声明字典数据类型。
本页内容
字典是将唯一键映射到值的可变映射。可以用键查找对应的值、添加新的键值对,或替换已有键关联的值。本指南介绍几种常见的字典创建方式,以及各类输入形式的适用场景。
Python 字典存储什么
字典将每个键映射到一个值。键必须可哈希;字符串、数字,以及只包含可哈希值的元组都是常见选择。列表、字典和集合不可哈希,因此不能用作键。值可以是任意 Python 对象。给已有键赋值会替换该键对应的值,而不会为同一个键创建第二个条目。
使用花括号创建字典
字典字面量使用花括号和 key: value 键值对。示例会创建一个映射、读取一个值、添加一个键,然后更新已有键。
运行此示例:
本节中的代码以及显示的标签或输出仍为英文。
person = {"name": "Alice", "age": 30}
print(person["name"])
person["city"] = "Boston"
person["age"] = 31
print(person["age"])
print(person["city"])
Alice
31
Boston
需要空字典时,使用 {}。
方括号可按键取值。读取不存在的键会引发 KeyError;如果键缺失时应返回 None,可以使用 person.get("nickname")(也可以把其他默认值作为第二个参数传入)。
使用 dict() 创建字典
内置的 dict() 构造函数可以通过 dict() 创建空映射。当键是有效的 Python 标识符时,关键字形式很方便:关键字名称会成为字符串键。如果键不是标识符,或者想明确写出键值对,请使用花括号。
本节中的代码以及显示的标签或输出仍为英文。
person = dict(name="Bob", age=25)
print(person)
{'name': 'Bob', 'age': 25}
例如,dict(name="Bob") 会创建字符串键 "name";关键字名称不能是任意表达式。
从键值对或现有数据构建字典
如果数据已经按键值对排列,可以将由二项可迭代对象组成的可迭代对象传给 dict()。每一对分别提供一个键和它的值。
本节中的代码以及显示的标签或输出仍为英文。
pairs = [("name", "Charlie"), ("age", 28)]
person = dict(pairs)
print(person["age"])
28
其他由键值对组成的可迭代数据源(例如元组)也适用。如果输入中某个键出现多次,后出现的值会替换结果字典中先前的值。每个条目必须恰好提供两个值。
使用字典推导式创建字典
字典推导式通过表达式从可迭代对象生成键值对。当每个输出条目都遵循相同的转换规则时,这种方式很实用。
本节中的代码以及显示的标签或输出仍为英文。
squares = {number: number ** 2 for number in range(4)}
print(squares)
{0: 0, 1: 1, 2: 4, 3: 9}
在这里,每个数字都成为一个键,它的平方成为对应的值。推导式也可以包含条件,例如 {number: number ** 2 for number in range(6) if number % 2 == 0}。
选择合适的字典创建方式
根据现有数据的形式选择:
- 如果键和值由你直接写出,使用花括号创建字面量;空字典也使用
{}。 - 当键是简单的标识符形式名称时,使用
dict()和关键字参数。 - 当现有数据由二项键值对组成时,使用
dict(pairs)。 - 当键或值需要按照统一规则从可迭代对象推导时,使用推导式。
这些方式都会创建可变字典。之后要添加或更改条目,可以使用 mapping[key] = value 赋值;如果该键已存在,赋值会替换原有的值。