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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:25:08