Python实现字典列表去重并累加重复项的count属性值
实现方案
你原来写的字典推导式只会保留同id下最后遍历到的字典元素,直接覆盖旧值,没法实现count值累加,用遍历聚合的方式就能满足需求,全Python版本通用,不需要额外依赖:
duplicate_array = [ {'id': 1, 'name': 'john', 'count': 1}, {'id': 1, 'name': 'john', 'count': 2}, {'id': 2, 'name': 'peter', 'count': 1}, ] temp_map = {} for item in duplicate_array: item_id = item['id'] if item_id in temp_map: # 存在同id项时直接累加count值 temp_map[item_id]['count'] += item['count'] else: # 存入副本避免修改原列表的原始数据 temp_map[item_id] = item.copy() final = list(temp_map.values())
运行后final的输出和预期完全一致:
[ {'id': 1, 'name': 'john', 'count': 3}, {'id': 2, 'name': 'peter', 'count': 1} ]
扩展说明
- 如果你的重复判定规则是
id和name同时一致才算重复,只需要把临时字典的key改成元组(item['id'], item['name'])即可,其余逻辑不需要改动。 - 如果想简化存在性判断的写法,可以用标准库
collections.defaultdict实现,核心聚合逻辑不变:
from collections import defaultdict count_map = defaultdict(int) attr_map = {} for item in duplicate_array: uid = item['id'] count_map[uid] += item['count'] attr_map[uid] = item['name'] final = [{'id': uid, 'name': attr_map[uid], 'count': cnt} for uid, cnt in count_map.items()]
注意:如果你的数据中存在同id对应不同name的异常情况,不要用上面的defaultdict简写,优先用第一种遍历写法,按需处理字段冲突即可。
内容的提问来源于stack exchange,提问作者back-new
相关产品推荐
相关产品推荐

