合并两个字典(相同键值求和)技术测试题的最优解法问询
嘿,这个字典合并的需求挺常见的,我来给你分享几个Python里的最佳实现方案,都能完美满足你的要求👇
先提个小细节:你的示例字典b有重复键
要注意的是,Python字典的键是唯一的,所以你定义的b = {'a': 4, 'b': 5, 'b': 6}实际会被处理成{'a': 4, 'b': 6}——后面的键值对会直接覆盖前面的,这点在测试的时候要留意哦。
方法1:直观的遍历赋值法(兼容Python 3.5+)
这个方法逻辑清晰,容易理解,还不会修改原始字典:
def dictMerge(a, b): # 先复制字典a的所有内容,避免污染原数据 merged_dict = a.copy() # 遍历字典b的每一组键值对 for key, val in b.items(): if key in merged_dict: # 键已存在,就把值相加 merged_dict[key] += val else: # 键不存在,直接添加 merged_dict[key] = val return merged_dict # 测试示例 a = {'x': 1, 'y': 2, 'z': 3} b = {'a': 4, 'b': 5, 'b': 6} print(dictMerge(a, b)) # 输出: {'x': 1, 'y': 2, 'z': 3, 'a': 4, 'b': 6}
方法2:用collections.defaultdict简化累加逻辑
如果之后还需要频繁做这种“键值累加合并”的操作,用defaultdict会更省心:
from collections import defaultdict def dictMerge(a, b): # 初始化一个默认值为0的字典,不存在的键自动取0 merged_dict = defaultdict(int) # 先把a的所有键值对加进去 for key, val in a.items(): merged_dict[key] += val # 再处理b的键值对,自动完成累加 for key, val in b.items(): merged_dict[key] += val # 转成普通字典返回(如果不需要defaultdict特性的话) return dict(merged_dict) # 测试结果和上面完全一致 print(dictMerge(a, b))
方法3:Python 3.9+专属的简洁写法
如果你用的是Python 3.9及以上版本,结合字典推导式和集合并集可以一行搞定:
def dictMerge(a, b): # 先获取两个字典所有键的并集,再对每个键计算值的和 return {key: a.get(key, 0) + b.get(key, 0) for key in a.keys() | b.keys()} # 测试输出同样符合预期 print(dictMerge(a, b))
内容的提问来源于stack exchange,提问作者Ajay Chaurasia
相关产品推荐
相关产品推荐

