Python如何实现嵌套字典的深度更新且不丢失原有非匹配键
嵌套字典增量更新最优实现
Python 内置的dict.update()为浅更新逻辑,遇到嵌套字典会直接替换整个值,导致原嵌套结构中未指定的键丢失。要实现仅更新匹配键、保留原有未涉及键的效果,最优方案是实现轻量递归深度更新函数,无需依赖第三方库,兼容任意深度的嵌套字典结构:
def deep_update(original: dict, update_content: dict) -> dict: for k, v in update_content.items(): # 若当前键两侧均为字典类型,递归进入内层更新 if isinstance(v, dict) and k in original and isinstance(original[k], dict): deep_update(original[k], v) # 其余场景直接覆盖赋值,和内置update行为一致 else: original[k] = v return original
效果测试
针对你给出的场景测试结果如下:
student = {"name":"Mike","class":{"grade":10,"section":"b"}} new_dict = {"class":{"section":"c"}} deep_update(student, new_dict) print(student) # 输出:{'name': 'Mike', 'class': {'grade': 10, 'section': 'c'}}
方案优势
- 纯原生实现无外部依赖,适配所有主流Python版本,比引入第三方库的方案更轻量
- 支持任意层数的嵌套字典增量更新,逻辑简洁无冗余
- 非字典类型值的更新逻辑和内置
update()完全一致,符合使用直觉
提示:如果需要保留原字典不被修改,可以先对原字典做深拷贝再传入函数:
import copy new_student = deep_update(copy.deepcopy(student), new_dict)
内容的提问来源于stack exchange,提问作者user9763248
相关产品推荐
相关产品推荐

