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

如何合并列表中同结构嵌套字典并计算指标均值?

解决方案:嵌套字典的数值收集与均值合并

假设你有如下示例数据:

# 单个字典的结构模板
ex = {
    "a": 1,
    "b": {
        "c": 2,
        "d": 3
    },
    "e": 4
}

# 包含多个同结构字典的列表
dicts = [
    {"a": 1, "b": {"c": 2, "d": 3}, "e": 4},
    {"a": 3, "b": {"c": 4, "d": 5}, "e": 6},
    {"a": 5, "b": {"c": 6, "d": 7}, "e": 8}
]

要实现收集对应key的数值为列表,再用均值替换列表的需求,递归是适配嵌套结构的最优方案,完整代码如下:

def merge_and_average(dict_list):
    if not dict_list:
        return {}
    
    # 第一步:递归收集所有对应key的数值为列表
    def collect_values(source_dict, all_dicts):
        result = {}
        for key, value in source_dict.items():
            if isinstance(value, dict):
                # 递归处理嵌套字典,传入所有字典中当前key对应的子字典
                result[key] = collect_values(value, [d[key] for d in all_dicts])
            else:
                # 收集所有字典中当前key的数值
                result[key] = [d[key] for d in all_dicts]
        return result
    
    # 第二步:递归将数值列表替换为均值
    def replace_with_mean(nested_dict):
        result = {}
        for key, value in nested_dict.items():
            if isinstance(value, dict):
                result[key] = replace_with_mean(value)
            else:
                # 计算均值,空列表返回0.0避免除以0
                result[key] = sum(value) / len(value) if value else 0.0
        return result
    
    # 先收集数值列表,再替换为均值
    collected_data = collect_values(dict_list[0], dict_list)
    return replace_with_mean(collected_data)

使用示例

# 调用函数处理示例列表
merged_result = merge_and_average(dicts)
print(merged_result)

输出结果:

{'a': 3.0, 'b': {'c': 4.0, 'd': 5.0}, 'e': 6.0}

代码说明

  • 递归逻辑适配任意深度的嵌套字典,只要输入列表中所有字典的结构完全一致即可正常工作。
  • collect_values 以第一个字典为结构模板,遍历每个层级的key,从所有输入字典中提取对应位置的数值,构建出值为列表的嵌套结构。
  • replace_with_mean 遍历收集后的结构,将每个数值列表替换为其算术均值,空列表场景返回0.0避免运行时错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:23:31