如何在Python中合并两个字典:相同键的值相加
Python字典合并:相同键值求和的实现方法
需求是合并两个字典,当存在相同键时,新字典中该键对应的值为原两个字典值的和;不同键则保留各自的值。
你的代码存在的问题
- 判断键的逻辑错误:
shopping_cart.keys() in shopping_cart_2.keys里,shopping_cart_2.keys缺少括号,且不能直接用视图对象做in判断,应该遍历单个键来检查是否存在。 - 值的处理错误:
shopping_cart.values + shopping_cart_2.values同样缺少括号,且视图对象直接相加无法实现按键对应的值求和,也无法生成目标字典。
正确实现方式
方法一:基础循环(易理解)
通过复制第一个字典,再遍历第二个字典的键值对,对存在的键做值累加,不存在的键直接添加:
def merge_carts(cart1, cart2): merged = cart1.copy() for key, value in cart2.items(): if key in merged: merged[key] += value else: merged[key] = value return merged shopping_cart = {'milk': 1, 'eggs': 1, 'bread': 2} shopping_cart_2 = {'milk': 1 ,'coke': 3, 'oyster sauces': 1} new_shop = merge_carts(shopping_cart, shopping_cart_2) print(new_shop) # 输出: {'milk': 2, 'eggs': 1, 'bread': 2, 'coke': 3, 'oyster sauces': 1}
方法二:字典推导式(简洁)
利用集合获取所有唯一键,再通过get方法获取对应值(不存在则取0),计算求和:
shopping_cart = {'milk': 1, 'eggs': 1, 'bread': 2} shopping_cart_2 = {'milk': 1 ,'coke': 3, 'oyster sauces': 1} merged = { key: shopping_cart.get(key, 0) + shopping_cart_2.get(key, 0) for key in set(shopping_cart) | set(shopping_cart_2) } print(merged)
方法三:collections.Counter(最简便,适合值为整数场景)
Counter是专门用于计数的工具类,直接相加即可实现相同键值求和:
from collections import Counter shopping_cart = {'milk': 1, 'eggs': 1, 'bread': 2} shopping_cart_2 = {'milk': 1 ,'coke': 3, 'oyster sauces': 1} merged_counter = Counter(shopping_cart) + Counter(shopping_cart_2) print(dict(merged_counter))
内容的提问来源于stack exchange,提问作者elsonn
相关产品推荐
相关产品推荐

