如何合并Python列表中同name键的字典并累加quantity值?
解决Python列表中相同name字典的合并与quantity累加问题
没问题,我来帮你搞定这个需求!要合并相同name的字典并累加quantity,最直观高效的方法是先用一个临时字典存储每个name对应的总数量,最后再转换成目标列表格式。
方法一:基础字典实现
这种方法不需要额外导入模块,适配所有Python版本:
user = [ {'name': 'ozzy', 'quantity': 5}, {'name': 'frank', 'quantity': 4}, {'name': 'ozzy', 'quantity': 3}, {'name': 'frank', 'quantity': 2}, {'name': 'james', 'quantity': 7}, ] # 初始化临时字典,用于存储每个name的总quantity temp_dict = {} for item in user: name = item['name'] qty = item['quantity'] # 如果name已在字典中就累加数量,否则初始化 if name in temp_dict: temp_dict[name] += qty else: temp_dict[name] = qty # 将临时字典转换为目标列表格式 result = [{'name': name, 'quantity': total_qty} for name, total_qty in temp_dict.items()] print(result) # 输出: [{'name': 'ozzy', 'quantity': 8}, {'name': 'frank', 'quantity': 6}, {'name': 'james', 'quantity': 7}]
方法二:用collections.defaultdict简化代码
如果不介意导入模块,defaultdict可以省去判断键是否存在的步骤,让代码更简洁:
from collections import defaultdict user = [ {'name': 'ozzy', 'quantity': 5}, {'name': 'frank', 'quantity': 4}, {'name': 'ozzy', 'quantity': 3}, {'name': 'frank', 'quantity': 2}, {'name': 'james', 'quantity': 7}, ] temp_dict = defaultdict(int) # 默认值为0的字典 for item in user: temp_dict[item['name']] += item['quantity'] result = [{'name': name, 'quantity': total_qty} for name, total_qty in temp_dict.items()] print(result) # 输出和上面一致
思路说明
- 临时字典的键是
name,值是对应的总quantity,利用字典键的唯一性自动完成去重 - 遍历原列表时,每个
name的数量会不断累加 - 最后通过列表推导式将字典键值对转换成目标字典的格式,得到最终结果
这两种方法的时间复杂度都是O(n),只需要遍历一次原列表,效率很高。
内容的提问来源于stack exchange,提问作者Rikkas
相关产品推荐
相关产品推荐

