Python dict 用于快速键查找和默认值

Python dict 将可哈希的键映射到值,以实现快速的键查找。 当每个元素都有唯一标识符并且需要按键快速访问时使用它。 dict.get 允许你为缺失键提供默认值,从而让查找更安全。 这使得 dict 非常适合基于键的查找任务。

Python Dict 示例:按键查找

输出:

输出将显示在这里...

输出:

用户_2: Noah
用户_3: 未知

示例解析

  1. dict 字面量创建了从用户 ID 到名称的映射;dict 的键必须可哈希,字符串是安全选择。
  2. name_by_id["用户_2"] 返回已有键的值,但当键缺失时会抛出 KeyError
  3. get 在键不存在时返回提供的默认值,从而避免可选键的异常。

常见错误

错误:当键是可选时使用 d[key]

错误示例:

status = status_by_order[order_id]

正确示例:

status = status_by_order.get(order_id, "未找到")

原因:d[key] 在键缺失时会抛出 KeyError,而 get 会返回默认值。

错误:使用不可哈希的键(如列表)。

错误示例:

bad_key = ["A101"]
status_by_order[bad_key] = "已发货"

正确示例:

good_key = ("A101",)
status_by_order[good_key] = "已发货"

原因:dict 键必须可哈希,列表不可哈希;元组可用,因为当其内容可哈希时它本身可哈希。

错误:认为 11.0True 是不同键。

错误示例:

d = {1: "一", True: "布尔"}

正确示例:

d = {1: "一", 2: "二"}

原因:相等的键会索引到同一个字典条目,后续赋值会覆盖前面的值。

Python dict vs list:怎么选

使用 dict 当…使用 list 当…
你需要将键映射到值并按键查找。你只需要有序序列或按位置访问。
键是稳定标识符,如 ID、代码或名称。元素位置是主要访问方式。

经验法则:键查找用 dict,按索引用 list。

性能考虑

Python 的 dict 实现经过优化,作为通用映射性能非常好,因此它是重复键查找的默认选择。 如果你只需要按索引访问,list 可能更简单,因为 dict 按键索引而非按位置。 遍历 dict 视图时避免在循环中增删项;迭代时修改可能会抛出 RuntimeError,需要修改时先复制键。

更多示例

合并默认值与覆盖值(Python 3.9+):

defaults = {"重试次数": 2, "超时": 5}
overrides = {"超时": 10}
config = defaults | overrides
print(config)

| 会创建新的 dict,键冲突时右侧 dict 获胜,适合分层配置。

从键/值对构建 dict:

language_labels = [("en", "Hello"), ("zh", "你好")]
labels_by_locale = dict(language_labels)
print(labels_by_locale)

dict() 接受键/值对的可迭代对象,当数据以元组形式到来时很方便。

何时使用 Python dict

  • 需要通过稳定键(如 ID、代码或名称)获取或更新值。
  • 需要可预测的迭代顺序(与插入顺序一致)。
  • 需要通过 get 或显式检查为缺失键提供安全默认值。
  • 需要按清晰的优先级规则合并字典。
  • 如果只需要按位置访问有序元素,不要用 dict;list 更简单。