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

如何计算字典中各样本嵌套列表对应行末元素的平均值?

问题:基于字典结构计算样本对应行最后一个元素的平均值

已知构建了一个结果字典,键为样本ID,值为包含多组读数的嵌套列表,字典结构如下(修正原代码中样本ID未加引号的语法问题):

my_dict = {
    'spec_1': [
        [4.276171114103283, 4.216314490117101, 4.200231488212351],
        [36.456192134864246, 36.61209395933328, 36.73806121212328],
        [35.544401317411655, 35.72775122320909, 35.728258225516406]
    ], 
    'spec_2': [
        [4.252633201087422, 4.19541914243176, 4.204273679608983],
        [36.456192134864246, 36.578691493906085, 36.69502654467063],
        [37.05449295426373, 37.05570996715497, 37.07813832583326]
    ]
}

需求:按行计算所有样本对应嵌套列表的最后一个元素的平均值,且样本数量可能变化,需要适配任意数量的样本。


解决方案

方法1:基础循环实现

先提取字典中所有样本的数值列表,再逐行收集所有样本的最后一个元素并计算平均值:

# 获取所有样本的数值列表
all_specimens = list(my_dict.values())
averages = []

# 遍历每一行的索引(假设所有样本行数一致)
for row_idx in range(len(all_specimens[0])):
    # 收集当前行所有样本的最后一个元素
    last_elements = [specimen[row_idx][-1] for specimen in all_specimens]
    # 计算平均值
    avg = sum(last_elements) / len(last_elements)
    averages.append(avg)

print(averages)

输出结果:

[4.202252583910667, 36.716543878396955, 36.40319827567483]

方法2:简洁的zip+列表推导式

利用zip()函数将所有样本的对应行打包,结合列表推导式快速计算平均值,自动适配任意样本数量:

all_specimens = list(my_dict.values())
# zip(*all_specimens) 将所有样本的对应行打包为元组,逐行处理
averages = [sum(row[-1] for row in row_group) / len(row_group) for row_group in zip(*all_specimens)]

print(averages)

输出结果与方法1完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:25:28