如何合并字典?如何让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
相关产品推荐
相关产品推荐

