Python如何计算defaultdict各分组对应列表值的平均值
defaultdict列表值均值计算方案
- 你此前认为「列表内的值无法修改」的认知是错误的。Python中
list属于可变数据类型,支持元素增删、修改、替换操作,计算均值时既可以保留原始列表数据单独生成均值结果,也可以直接替换原字典中对应键的值为均值。
方案1:保留原始明细数据(推荐)
该方案不会改动原始存储的强度列表,单独生成存储均值的新字典,后续需要回溯原始数据时不会出现信息丢失。
from collections import defaultdict # 你原有的数据初始化逻辑 Unknown_dict = defaultdict(list) for j, k in zip(my_unknown_id, my_unknown_intensity): Unknown_dict[j].append(k) # 均值计算逻辑 avg_result = {} for key, num_list in Unknown_dict.items(): # 增加空列表判断,避免除零报错 avg_result[key] = sum(num_list) / len(num_list) if num_list else 0
针对你给出的示例数据,运行后得到的结果为:
{'ABC': 382.0, 'JIK': 622.5, 'KIL': 100.0, 'JAL': 200.0, 'HON': 300.0}
如果你使用Python 3.4及以上版本,也可以调用标准库
statistics模块的mean函数简化写法:from statistics import mean # 计算时替换对应逻辑即可 avg_result[key] = mean(num_list) if num_list else 0
方案2:直接修改原字典(无需保留原始数据时使用)
如果不需要保留每个键对应的原始数值列表,可以直接遍历字典将对应值替换为均值。注意遍历键时要先转为列表副本,避免遍历过程中修改字典结构触发迭代异常。
for key in list(Unknown_dict.keys()): num_list = Unknown_dict[key] Unknown_dict[key] = sum(num_list) / len(num_list) if num_list else 0
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

