Python实现:从数组对象中计算平均值并找最小平均值项
解决方案
我来帮你一步步实现这两个需求,代码都是Python的,直接就能跑:
1. 计算每个子项的平均值
首先我们遍历原始数据,对每个valueXX对应的A-E数值计算平均值,保留两位小数和示例结果一致:
resultFromCalculation = [{'value40': {'A': 3.1, 'B': 5.62, 'C': 5.99, 'D': 5.06, 'E': 5.09}}, {'value50': {'A': 2.95, 'B': 5.21, 'C': 5.41, 'D': 4.64, 'E': 4.5}}, {'value60': {'A': 2.35, 'B': 4.8, 'C': 4.83, 'D': 4.08, 'E': 3.62}}, {'value70': {'A': 2.95, 'B': 5.21, 'C': 5.41, 'D': 4.64, 'E': 4.5}}] avgValues = [] for item in resultFromCalculation: # 每个item是单个键值对的字典,快速取出键和对应的数值字典 key, values_dict = next(iter(item.items())) # 计算平均值并保留两位小数 average = sum(values_dict.values()) / len(values_dict) avg_rounded = round(average, 2) avgValues.append({key: avg_rounded}) print(avgValues) # 输出:[{'value40': 4.97}, {'value50': 4.41}, {'value60': 3.99}, {'value70': 4.41}]
这里用next(iter(item.items()))快速取出单个键值对,避免多余循环,效率更高。计算后四舍五入到两位小数,和你要的结果完全匹配。
2. 找出第一个出现的最小平均值对应的项
接下来我们从avgValues里找到第一个平均值最小的项:
# 把每个字典转换成(键, 平均值)的元组列表,方便后续处理 value_avg_pairs = [(list(d.keys())[0], list(d.values())[0]) for d in avgValues] # 找到所有平均值里的最小值 min_avg = min(pair[1] for pair in value_avg_pairs) # 遍历找到第一个匹配最小平均值的完整项 first_min_entry = next(d for d in avgValues if list(d.values())[0] == min_avg) print(first_min_entry) # 输出:{'value60': 3.99}
如果只需要键名value60,可以改成:
first_min_key = next(pair[0] for pair in value_avg_pairs if pair[1] == min_avg) print(first_min_key) # 输出:value60
这样就完美实现了你要的两个功能,代码简洁易读,也处理了多个项平均值相同的情况(只取第一个出现的)。
内容的提问来源于stack exchange,提问作者MMMMS
相关产品推荐
相关产品推荐

