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
相关产品推荐
相关产品推荐

