You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于另一个字典更新Python字典且保留原有嵌套键值信息

Python嵌套字典深度合并方案

问题原因

你使用的{**dic_1, **dic_2}属于浅合并逻辑,仅会对字典的顶层键值对做覆盖替换。如果顶层键对应的value是嵌套字典,会直接用dic_2的对应嵌套字典整体替换,不会进入嵌套结构做增量合并,因此会丢失dic_1中a键下的"b": "b"数据。

解决方法

我们可以通过递归逻辑实现深度合并,既保留原字典的嵌套字段,又用新字典的数值做覆盖、新增:

1. 自定义递归合并函数

def deep_merge(base_dict, update_dict):
    # 复制基础字典,避免修改原字典数据
    merged = base_dict.copy()
    for key, value in update_dict.items():
        # 当两个字典的同key值都是字典类型时,递归合并嵌套结构
        if key in merged and isinstance(merged[key], dict) and isinstance(value, dict):
            merged[key] = deep_merge(merged[key], value)
        # 其他情况直接用更新字典的值覆盖/新增
        else:
            merged[key] = value
    return merged

2. 调用测试

dic_1 = {"a": {"a": "a", "b": "b"}, "b": "b"}
dic_2 = {"a": {"a": "b", "c": "b"}, "b": "c" }
dic_3 = deep_merge(dic_1, dic_2)
print(dic_3)
# 输出结果:{'a': {'a': 'b', 'b': 'b', 'c': 'b'}, 'b': 'c'}

注意事项

  • 上述实现不会修改原始的dic_1和dic_2,返回的是独立的新字典
  • 支持任意层级的嵌套字典合并,无需提前确定嵌套深度
  • 如果项目允许引入第三方依赖,也可以直接使用deepmerge等开源库的成熟实现,不用自行封装函数。

内容的提问来源于stack exchange,提问作者smallbirds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:36:05