You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 06:03:37