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

如何对字典列表排序并插入分组汇总项?

字典列表排序、分组并插入分组汇总项

原始数据

original_data = [
    {'A': 'LabelA', 'B': 'DescriptionA', 'C': '1', 'D': '5', 'sum': '0'},
    {'A': 'LabelB', 'B': 'DescriptionB', 'C': '2', 'D': '6', 'sum': '0'},
    {'A': 'LabelB', 'B': 'DescriptionB', 'C': '3', 'D': '7', 'sum': '0'},
    {'A': 'LabelA', 'B': 'DescriptionA', 'C': '4', 'D': '8', 'sum': '0'}
]

期望结果

expected_result = [
    {'A': 'LabelA', 'B': 'DescriptionA', 'C': '5', 'D': '13', 'sum': '1'},
    {'A': 'LabelA', 'B': 'DescriptionA', 'C': '1', 'D': '5', 'sum': '0'},
    {'A': 'LabelA', 'B': 'DescriptionA', 'C': '4', 'D': '8', 'sum': '0'},
    {'A': 'LabelB', 'B': 'DescriptionB', 'C': '5', 'D': '13', 'sum': '1'},
    {'A': 'LabelB', 'B': 'DescriptionB', 'C': '2', 'D': '6', 'sum': '0'},
    {'A': 'LabelB', 'B': 'DescriptionB', 'C': '3', 'D': '7', 'sum': '0'}
]

解决方案

通过排序→分组→生成汇总项并合并三个步骤即可实现,以下是Python代码实现:

from itertools import groupby

original_data = [
    {'A': 'LabelA', 'B': 'DescriptionA', 'C': '1', 'D': '5', 'sum': '0'},
    {'A': 'LabelB', 'B': 'DescriptionB', 'C': '2', 'D': '6', 'sum': '0'},
    {'A': 'LabelB', 'B': 'DescriptionB', 'C': '3', 'D': '7', 'sum': '0'},
    {'A': 'LabelA', 'B': 'DescriptionA', 'C': '4', 'D': '8', 'sum': '0'}
]

# 1. 按A、B字段排序,确保同组数据连续
sorted_data = sorted(original_data, key=lambda x: (x['A'], x['B']))

final_result = []

# 2. 按A、B分组处理每组数据
for (label_a, desc_b), group in groupby(sorted_data, key=lambda x: (x['A'], x['B'])):
    group_items = list(group)
    # 计算组内C、D的数值和,注意字符串转整数计算后转回字符串
    total_c = str(sum(int(item['C']) for item in group_items))
    total_d = str(sum(int(item['D']) for item in group_items))
    
    # 3. 生成当前组的汇总项
    summary = {
        'A': label_a,
        'B': desc_b,
        'C': total_c,
        'D': total_d,
        'sum': '1'
    }
    
    # 将汇总项放在组内数据前,添加到最终结果
    final_result.append(summary)
    final_result.extend(group_items)

# 输出验证结果
print(final_result)

关键说明

  • itertools.groupby要求数据必须是已排序的,否则同一个分组会被拆成多个部分,因此排序是分组的前提。
  • 由于原始数据中C、D字段是字符串类型,求和时需要先转为整数,计算完成后再转回字符串以匹配结果格式。
  • 分组返回的是迭代器,需先转为列表才能重复使用(计算总和和后续添加组内数据)。

内容的提问来源于stack exchange,提问作者DrZoidberg09

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:25:27