如何计算字典中各样本嵌套列表对应行末元素的平均值?
问题:基于字典结构计算样本对应行最后一个元素的平均值
已知构建了一个结果字典,键为样本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
相关产品推荐
相关产品推荐

