如何计算Python字典各键对应列表值的平均值并按键排序
解决方案
首先注意:不要用dict作为自定义变量名,它是Python内置的字典类型,直接赋值会覆盖内置方法,后续调用字典相关内置逻辑会报错,下面示例统一把示例字典命名为num_dict。
示例原始字典:
num_dict = { "numbers1" : [4,5,6,3,2] , "numbers2" : [40,5,63,2] , "numbers3" : [10,25,96,3]}
计算每个键对应列表的平均值
平均值的计算逻辑是「列表元素总和 ÷ 列表元素个数」,两种常用实现方式:
- 原生Python无依赖实现,用内置的
sum()算总和、len()算长度,遍历字典键值对生成结果即可,也可以写成字典推导式简化代码:
# 普通写法 avg_res = {} for k, v in num_dict.items(): avg_res[k] = sum(v) / len(v) # 字典推导式简化写法 avg_res = {k: sum(v)/len(v) for k, v in num_dict.items()}
运行后得到的avg_res结果为{'numbers1': 4.0, 'numbers2': 27.5, 'numbers3': 33.5},和手动计算结果一致。
- 如果不想手动写计算逻辑,可以直接用Python标准库
statistics内置的mean()方法,专门用来算数值序列平均值,逻辑更严谨(会自动做参数合法性校验,前提是传入的列表为非空合法数值序列):
import statistics avg_res = {k: statistics.mean(v) for k, v in num_dict.items()}
按键对字典排序
Python 3.7及以上版本的字典默认会保留键值对的插入顺序,因此排序后重新生成字典即可保留排序结果,直接用内置sorted()方法实现:
# 按键升序排序(默认排序规则,当前示例排序后顺序和原字典一致) sorted_dict = dict(sorted(avg_res.items(), key=lambda x: x[0])) # 如果需要按键降序排序,添加reverse=True参数即可 sorted_dict_desc = dict(sorted(avg_res.items(), key=lambda x: x[0], reverse=True))
小提示:如果键名是带数字后缀的字符串(比如同时存在
numbers2和numbers10),默认字符串排序会把numbers10排在numbers2前面,这种场景如果需要按数字部分的自然逻辑排序,可以自定义key参数,用正则提取键名里的数字转成整数再比较即可,普通业务场景直接用默认按键排序就够用。
内容的提问来源于stack exchange,提问作者Sayandeep Banerjee
相关产品推荐
相关产品推荐

