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

Python中如何按重复键对应值的平均值构建字典?

按键计算对应值平均值的优雅实现

方案1:利用itertools.groupby(适配已排序的keys)

因为你的keys已经是排序好的,itertools.groupby可以直接按键分组,非常高效:

from itertools import groupby
from operator import itemgetter

keys = ['a', 'a', 'a', 'b', 'b', 'c']
values = [2, 4, 6, 6, 4, 3]

result = {}
for key, group in groupby(zip(keys, values), key=itemgetter(0)):
    # 提取当前键对应的所有值
    vals = [v for _, v in group]
    # 计算平均值
    result[key] = sum(vals) / len(vals)

print(result)  # 输出: {'a': 4.0, 'b': 5.0, 'c': 3.0}

方案2:用collections.defaultdict累加总和与计数(通用场景)

如果后续keys可能不排序,这个方案更通用,逻辑直观:

from collections import defaultdict

keys = ['a', 'a', 'a', 'b', 'b', 'c']
values = [2, 4, 6, 6, 4, 3]

# 用列表存储[总和, 计数]
sum_count = defaultdict(lambda: [0, 0])
for k, v in zip(keys, values):
    sum_count[k][0] += v
    sum_count[k][1] += 1

# 推导式生成结果字典
result = {k: total / count for k, (total, count) in sum_count.items()}
print(result)  # 输出: {'a': 4.0, 'b': 5.0, 'c': 3.0}

方案3:借助pandas(简洁高效,适合数据分析场景)

如果你的项目已经使用pandas,一行代码就能搞定:

import pandas as pd

keys = ['a', 'a', 'a', 'b', 'b', 'c']
values = [2, 4, 6, 6, 4, 3]

# 分组后计算均值并转为字典
result = pd.DataFrame({'key': keys, 'value': values}).groupby('key')['value'].mean().to_dict()
print(result)  # 输出: {'a': 4.0, 'b': 5.0, 'c': 3.0}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:45:31