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

如何合并两个Python字典并保留同键下的所有值?

合并嵌套字典:保留相同外层键下的所有内层键值对

嘿,我完全懂你的困扰——dict.update()方法会直接用新字典的整个值替换旧字典对应键的值,而你想要的是把相同外层键下的内层字典也合并起来,保留所有键值对对吧?

先把你给出的字典补全(末尾缺了闭合大括号),方便后续演示:

dict1 = {
    160: {'na': 'na'},
    162: {'test_': 'qq', 'wds': 'wew'},
    163: {'test_env': 'test_env_value', 'env': 'e'},
    159: {'no': 'test_no'}
}

dict2 = {
    160: {'naa': 'na'},
    162: {'envi_specs': 'qq', 'wds': 'wew'},
    163: {'test_env': 'test_env_value', 'ens': 's'}
}

下面给你两种简单可行的解决方案:

方法一:遍历所有键并合并内层字典

这种方法会处理两个字典里的所有键(包括只在其中一个字典里存在的键),然后把对应内层字典合并:

merged_dict = {}
# 获取两个字典所有键的并集,确保不遗漏任何键
all_keys = set(dict1.keys()).union(dict2.keys())

for key in all_keys:
    # 取出对应内层字典,没有的话用空字典兜底
    inner_dict1 = dict1.get(key, {})
    inner_dict2 = dict2.get(key, {})
    # 合并内层字典:如果有重复键,dict2的内层值会覆盖dict1的(和你期望的结果一致)
    merged_inner = {**inner_dict1, **inner_dict2}
    merged_dict[key] = merged_inner

运行后得到的结果就是你想要的:

{
  159: {'no': 'test_no'},
  160: {'na': 'na', 'naa': 'na'},
  162: {'test_': 'qq', 'wds': 'wew', 'envi_specs': 'qq'},
  163: {'test_env': 'test_env_value', 'env': 'e', 'ens': 's'}
}

方法二:基于原字典扩展(更节省内存)

如果你想以dict1为基础,直接扩展它(或者复制一份避免修改原字典),可以这样做:

# 先复制dict1,避免修改原字典
merged_dict = dict1.copy()

for key, inner_dict in dict2.items():
    if key in merged_dict:
        # 对已存在的键,更新内层字典而不是替换整个值
        merged_dict[key].update(inner_dict)
    else:
        # 对不存在的键,直接添加整个内层字典
        merged_dict[key] = inner_dict.copy()

这个方法的结果和上面完全一致,而且不需要额外处理所有键的并集,效率更高一些。

小提示

如果遇到内层字典有重复键,你可以通过调整合并顺序来决定哪个值保留:

  • {**inner_dict1, **inner_dict2}:dict2的内层值覆盖dict1的
  • {**inner_dict2, **inner_dict1}:dict1的内层值覆盖dict2的

这样就能完美满足你合并嵌套字典并保留所有值的需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:02:06