字典合并:覆盖值与改变顺序是两件事
默认配置与用户配置合并时,右侧值通常应覆盖左侧值。若还要把结果按输入顺序展示,就需要知道覆盖已有键是否改变它的位置。
▶ 本文含视频讲解▶ 教学视频手动播放 · 英语讲解
Python Tutorial for Beginners
Python 入门课程作为语法与编程背景复习;本文使用的较新标准库特性不保证在该课程中逐项覆盖。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。
播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。
问题从哪里出现
默认配置与用户配置合并时,右侧值通常应覆盖左侧值。若还要把结果按输入顺序展示,就需要知道覆盖已有键是否改变它的位置。
理解核心机制
现代 Python 的 dict 保留插入顺序。a | b 创建新字典,冲突键采用 b 的值,但已有键保留原位置;b 中的新键追加在后面。这个操作只做浅层合并。
动手做一个小实验
Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。
defaults = {"host": "localhost", "port": 8000}
override = {"port": 9000, "debug": False}
merged = defaults | override
assert list(merged) == ["host", "port", "debug"]
assert defaults["port"] == 8000
print(merged)适用边界与常见误区
嵌套字典会整体覆盖,不会递归合并。若配置允许 null、删除标记或列表追加,需要制定独立规则,不能靠一个合并运算符猜测意图。
继续练习
把数据库配置放进嵌套字典,只覆盖其中一个字段,观察其他字段是否保留,并写出你需要的合并策略。