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

Python字典列表按指定键去重并对指定值键求和方案问询

解决方案

以下是实现需求的Python函数,支持按指定键分组、值求和,并自动合并不同字段值为列表:

def merge_and_sum(arr, name_key, value_key):
    groups = {}
    no_key_items = []
    
    for item in arr:
        if name_key not in item:
            no_key_items.append(item)
            continue
        
        key_val = item[name_key]
        if key_val not in groups:
            groups[key_val] = item.copy()
            groups[key_val][value_key] = item[value_key]
        else:
            groups[key_val][value_key] += item[value_key]
            # 合并非分组键、非求和键的字段
            for k, v in item.items():
                if k in (name_key, value_key):
                    continue
                existing = groups[key_val][k]
                if isinstance(existing, list):
                    if v not in existing:
                        existing.append(v)
                else:
                    if existing != v:
                        groups[key_val][k] = [existing, v]
    
    return list(groups.values()) + no_key_items

场景测试

测试数据

arrayList = [
    {"value": 10,"name": "BBB","extra": "sample"},
    {"value": 10,"name": "BBB"},
    {"value": 10,"name": "AAA","extra": "sample"},
    {"value": 10,"name": "AAA"}
]

场景1:按name分组,对value求和

result = merge_and_sum(arrayList, "name", "value")
print(result)

输出:

[{'value': 20, 'name': 'BBB', 'extra': 'sample'}, {'value': 20, 'name': 'AAA', 'extra': 'sample'}]

场景2:按extra分组,对value求和

result = merge_and_sum(arrayList, "extra", "value")
print(result)

输出:

[{'value': 20, 'name': ['BBB', 'AAA'], 'extra': 'sample'}, {'value': 10, 'name': 'BBB'}, {'value': 10, 'name': 'AAA'}]

核心逻辑说明

  • 用groups字典按指定的name_key分组存储合并结果
  • 单独收集不包含name_key的原始项,直接加入最终结果
  • 对value_key对应的值进行累加求和
  • 合并其他字段时,若同一分组内字段值不同,自动转为列表存储;值相同时保留原类型

内容的提问来源于stack exchange,提问作者J.FOG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:37:50