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

如何对动态字典列表按每4个字典汇总相同键值?

分组汇总字典列表的实现方案

问题描述

我有如下格式的字典列表:

[{'success': 10, 'failed': 15, 'manual': 20},
 {'manual': 5, 'success': 10},
 {},
 {},
 {'success': 20, 'manual': 25, 'failed': 30},
 {'success': 2, 'manual': 4, 'failed': 6},
 {},
 {}]

希望按每4个字典为一组,汇总各组内相同键的数值,最终得到如下格式的结果:

[{'success': 20, 'failed': 15, 'manual': 25},
 {'success': 22, 'manual': 29, 'failed': 36}]

请问如何实现这一需求以适配动态长度的列表?

实现方案

思路解析

  1. 动态分组:将原列表按指定大小(这里是4)拆分,自动适配任意长度的输入列表,最后一组不足4个元素也正常处理。
  2. 键值累加:对每个分组内的所有字典,遍历键值对,相同键的数值进行累加,得到分组的汇总字典。

代码实现(使用collections.defaultdict)

from collections import defaultdict

def group_and_sum(dict_list, group_size=4):
    # 按指定大小拆分列表为多个分组
    groups = [dict_list[i:i+group_size] for i in range(0, len(dict_list), group_size)]
    result = []
    for group in groups:
        sum_dict = defaultdict(int)
        # 遍历分组内的每个字典,累加键值
        for d in group:
            for key, value in d.items():
                sum_dict[key] += value
        # 转换为普通字典,匹配示例输出格式
        result.append(dict(sum_dict))
    return result

# 测试用例
input_list = [
    {'success': 10, 'failed': 15, 'manual': 20},
    {'manual': 5, 'success': 10},
    {},
    {},
    {'success': 20, 'manual': 25, 'failed': 30},
    {'success': 2, 'manual': 4, 'failed': 6},
    {},
    {}
]

# 执行并输出结果
print(group_and_sum(input_list))

无依赖版本(不使用collections)

如果不想引入额外模块,用普通字典实现:

def group_and_sum(dict_list, group_size=4):
    groups = [dict_list[i:i+group_size] for i in range(0, len(dict_list), group_size)]
    result = []
    for group in groups:
        sum_dict = {}
        for d in group:
            for key, value in d.items():
                if key in sum_dict:
                    sum_dict[key] += value
                else:
                    sum_dict[key] = value
        result.append(sum_dict)
    return result

代码说明

  • 分组逻辑:利用列表切片dict_list[i:i+group_size],步长设为group_size,可以快速将列表拆分为指定大小的子列表,自动处理动态长度的输入。
  • 累加逻辑:使用defaultdict(int)可以避免手动判断键是否存在,直接累加数值;普通字典版本则通过判断键是否存在来处理初始化和累加。
  • 结果输出:每个分组的汇总结果会被添加到最终列表中,输出格式与需求一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:50:18