WMX · 随记
·Python· 3 分钟阅读

字典合并:覆盖值与改变顺序是两件事

默认配置与用户配置合并时,右侧值通常应覆盖左侧值。若还要把结果按输入顺序展示,就需要知道覆盖已有键是否改变它的位置。

▶ 本文含视频讲解
▶ 教学视频手动播放 · 英语讲解

Python Tutorial for Beginners

Python 入门课程作为语法与编程背景复习;本文使用的较新标准库特性不保证在该课程中逐项覆盖。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。

播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。

Python 系列概览:输入校验、数据处理与行为验证
Python 系列概览:输入校验、数据处理与行为验证 点击图片查看大图 ↗

问题从哪里出现

默认配置与用户配置合并时,右侧值通常应覆盖左侧值。若还要把结果按输入顺序展示,就需要知道覆盖已有键是否改变它的位置。

理解核心机制

现代 Python 的 dict 保留插入顺序。a | b 创建新字典,冲突键采用 b 的值,但已有键保留原位置;b 中的新键追加在后面。这个操作只做浅层合并。

动手做一个小实验

Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。

Python6 行 · 可横向滚动
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、删除标记或列表追加,需要制定独立规则,不能靠一个合并运算符猜测意图。

继续练习

把数据库配置放进嵌套字典,只覆盖其中一个字段,观察其他字段是否保留,并写出你需要的合并策略。

参考资料

阅读相关官方文档或原始资料 ↗

← 返回文章归档