Python字典列表合并重复项并汇总对应价格求助
解决字典列表按name合并并汇总price的问题
现有代码的问题
你当前的代码只是收集了不重复的name和price值,但没有建立name与对应价格的关联,也没有做数值累加,所以无法得到目标结果。另外注意:原数据里的price是字符串类型,直接操作会导致字符串拼接,必须先转为数值类型(整数/浮点数)才能做加法。
解决方案
方法一:普通字典实现
l = [{'id': 1, 'name': 'apple', 'price': '100', 'year': '2000', 'currency': 'eur'}, {'id': 2, 'name': 'apple', 'price': '150', 'year': '2071', 'currency': 'eur'}, {'id': 3, 'name': 'apple', 'price': '1220', 'year': '2076', 'currency': 'eur'}, {'id': 4, 'name': 'cucumber', 'price': '90000000', 'year': '2080', 'currency': 'eur'}, {'id': 5, 'name': 'pear', 'price': '1000', 'year': '2000', 'currency': 'eur'}, {'id': 6, 'name': 'apple', 'price': '150', 'year': '2022', 'currency': 'eur'}, {'id': 9, 'name': 'apple', 'price': '100', 'year': '2000', 'currency': 'eur'}, {'id': 10, 'name': 'grape', 'price': '150', 'year': '2022', 'currency': 'eur'}, ] # 按name分组累加价格 total_by_name = {} for item in l: name = item['name'] # 把字符串price转为整数,避免拼接 price = int(item['price']) if name in total_by_name: total_by_name[name] += price else: total_by_name[name] = price # 生成你期望的单name格式(以apple为例) apple_result = [{'name': 'apple'}, {'price': total_by_name['apple']}] print(apple_result) # 如果要生成所有name的汇总列表 final_result = [{'name': name, 'price': total} for name, total in total_by_name.items()] print(final_result)
方法二:用collections.defaultdict简化代码
defaultdict可以自动处理key不存在的情况,代码更简洁:
from collections import defaultdict total_by_name = defaultdict(int) for item in l: total_by_name[item['name']] += int(item['price']) # 生成目标格式 apple_result = [{'name': 'apple'}, {'price': total_by_name['apple']}] print(apple_result)
输出示例
针对apple的输出:
[{'name': 'apple'}, {'price': 1720}]
所有name的汇总输出:
[{'name': 'apple', 'price': 1720}, {'name': 'cucumber', 'price': 90000000}, {'name': 'pear', 'price': 1000}, {'name': 'grape', 'price': 150}]
内容的提问来源于stack exchange,提问作者curlyfries98
相关产品推荐
相关产品推荐

