Python中如何计算字典单个键对应多值的平均值?
嘿,这个问题我经常碰到,给你一步步拆解怎么解决~
计算字典中指定键对应值的平均值
基础场景:值都是数值类型
就像你给的示例{'name': [1,2,3,3,1]},计算逻辑非常直观:
- 先拿到指定键对应的数值列表
- 用总和除以列表长度得到平均值(记得处理空列表的情况,避免除以0报错)
代码实现如下:
my_dict = {'name': [1,2,3,3,1]} target_key = 'name' # 获取对应值,键不存在时返回空列表 value_list = my_dict.get(target_key, []) if value_list: average = sum(value_list) / len(value_list) else: # 可以根据需求返回0、None或者提示信息 average = 0 print(average) # 输出2.0,和你的示例结果一致
进阶场景:值包含字符串类型的数值
针对你提到的rows数据,整理后的字典里会混有字符串和浮点数类型的数值,这时候需要先把所有值统一转换成数值类型,再计算平均值。
完整的代码流程(包括整理字典的步骤):
rows = (("name", 0.4), ("name", "0.3"), ("name", "0.9"), ("name", "1.2"), ("name", "1.1")) # 第一步:把rows整理成键对应多值的字典 from collections import defaultdict result_dict = defaultdict(list) for key, val in rows: result_dict[key].append(val) # 第二步:计算指定键的平均值 target_key = 'name' value_list = result_dict.get(target_key, []) if value_list: # 把所有值转换成浮点数,处理混合类型的情况 numeric_values = [float(v) for v in value_list] average = sum(numeric_values) / len(numeric_values) else: average = 0 print(average) # 输出0.78
额外注意事项
- 如果担心有无法转换的非数值字符串,可以加上异常处理,跳过无效值:
numeric_values = [] for v in value_list: try: numeric_values.append(float(v)) except ValueError: print(f"跳过无法转换的无效值:{v}") if numeric_values: average = sum(numeric_values) / len(numeric_values) else: average = 0
- 如果键不存在,用
get方法返回空列表可以避免触发KeyError,让代码更健壮。
内容的提问来源于stack exchange,提问作者user14155947
相关产品推荐
相关产品推荐

