Python dict 用于快速键查找和默认值
Python dict 将可哈希的键映射到值,以实现快速的键查找。
当每个元素都有唯一标识符并且需要按键快速访问时使用它。
dict.get 允许你为缺失键提供默认值,从而让查找更安全。
这使得 dict 非常适合基于键的查找任务。
Python Dict 示例:按键查找
输出:
输出将显示在这里...
输出:
用户_2: Noah
用户_3: 未知
示例解析
- dict 字面量创建了从用户 ID 到名称的映射;dict 的键必须可哈希,字符串是安全选择。
name_by_id["用户_2"]返回已有键的值,但当键缺失时会抛出KeyError。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 键必须可哈希,列表不可哈希;元组可用,因为当其内容可哈希时它本身可哈希。
错误:认为 1、1.0 和 True 是不同键。
错误示例:
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 更简单。