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

如何合并字典?如何让dict3输出10:20?现有代码仅输出公共键

解决字典合并时保留所有键的问题

嘿,我来帮你搞定这个字典合并的事儿!你现在的代码只处理了两个字典的公共键,所以dict2里独有的10:20根本没被加到dict3里,甚至如果dict1有dict2没有的键,还会直接报错。

问题根源

你的原代码只遍历了dict1的键,然后直接取dict2[key]——这就意味着:

  • 只有同时存在于两个字典里的键会被保留
  • 如果dict1里有dict2没有的键,会触发KeyError

解决方案:保留所有键并按需处理

我们需要遍历两个字典的所有唯一键,然后针对每个键的存在情况分别处理:如果是公共键就存元组,是单个字典独有的键就直接保留对应值(或者你也可以统一成元组格式,下面会提到)。

方案1:按需求保留独有的键为原值

这个方案会让公共键保持元组格式,独有的键直接保留单个值,正好符合你想要输出10:20的需求:

def mergeDicts(dict1, dict2):
    dict3 = {}
    # 获取两个字典的所有唯一键(Python 3.9+支持,旧版本可以用set(dict1.keys()).union(set(dict2.keys())))
    all_keys = dict1.keys() | dict2.keys()
    for key in all_keys:
        # 用get方法避免键不存在的报错,不存在时返回None
        val_from_dict1 = dict1.get(key)
        val_from_dict2 = dict2.get(key)
        
        if val_from_dict1 is not None and val_from_dict2 is not None:
            # 公共键:存两个值的元组
            dict3[key] = (val_from_dict1, val_from_dict2)
        elif val_from_dict1 is not None:
            # 只在dict1里的键:保留dict1的值
            dict3[key] = val_from_dict1
        else:
            # 只在dict2里的键:保留dict2的值
            dict3[key] = val_from_dict2
    return dict3

# 测试一下
print(mergeDicts({1:3, 2:4},{1:5, 2:6, 10:20}))

输出结果:

{1: (3, 5), 2: (4, 6), 10: 20}

方案2:统一所有键为元组格式

如果你希望不管键是否是公共的,都用元组格式(不存在的一方用None占位),可以简化代码:

def mergeDicts(dict1, dict2):
    dict3 = {}
    all_keys = dict1.keys() | dict2.keys()
    for key in all_keys:
        # 直接用get获取,不存在就返回None
        dict3[key] = (dict1.get(key), dict2.get(key))
    return dict3

print(mergeDicts({1:3, 2:4},{1:5, 2:6, 10:20}))

输出结果:

{1: (3, 5), 2: (4, 6), 10: (None, 20)}

这样就能完美解决你的问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:57:54