Python中按第二分类对同一键下的多值求平均值
解决三元元组列表分组求平均的问题
没问题,我来帮你搞定这个分组计算平均值的需求!针对你的三元元组列表,我们可以通过嵌套字典来分类收集数据,再计算平均值并格式化输出,具体步骤如下:
步骤1:准备数据与分组收集
首先,我们用一个嵌套字典来存储每个主key(比如A1、A2)下各分类(A、B)对应的所有数值:
# 你的原始数据 data = [('A1', 'A', 342.5), ('A2', 'A', 509.70), ('A2', 'B', 119.34), ('A1', 'B', 618.42), ('A1', 'A', 173.54), ('A1', 'B', 235.21)] # 初始化嵌套字典用于分组存储 grouped_data = {} for main_key, category, value in data: # 如果主key不在字典中,先创建对应的空字典 if main_key not in grouped_data: grouped_data[main_key] = {} # 如果当前分类不在主key的子字典中,创建空列表 if category not in grouped_data[main_key]: grouped_data[main_key][category] = [] # 将数值添加到对应分类的列表中 grouped_data[main_key][category].append(value)
步骤2:计算平均值并格式化输出
接下来遍历分组好的数据,计算每个分类的平均值,然后按照你需要的格式拼接结果:
output_parts = [] # 按主key排序(保证A1、A2的顺序和示例一致) for main_key in sorted(grouped_data.keys()): category_parts = [] # 按分类排序(保证A在前、B在后) for category in sorted(grouped_data[main_key].keys()): values = grouped_data[main_key][category] average = sum(values) / len(values) # 格式化分类和平均值的字符串,保留对应小数位数 category_parts.append(f"({category} {average})") # 拼接当前主key的所有分类结果 output_parts.append(f"{main_key} {' '.join(category_parts)}") # 合并所有部分得到最终输出 final_result = ' '.join(output_parts) print(final_result)
运行这段代码后,输出结果就和你期望的完全一致:
A1 (A 258.02) (B 426.815) A2 (A 509.7) (B 119.34)
额外优化说明
如果你需要统一保留两位小数(比如让A2的A显示为509.70而不是509.7),可以修改格式化字符串为f"({category} {average:.2f})",这样所有数值都会按两位小数展示,更贴合示例的输出格式。
之前处理二元元组时只需要一层字典,这次三元元组多了分类维度,用嵌套字典就能完美解决这个层级问题啦~
内容的提问来源于stack exchange,提问作者R_J
相关产品推荐
相关产品推荐

