无需使用lambda实现字典items按值逆序排序的替代写法
无需lambda实现字典按值降序排序的方案
你要实现的按字典值降序排序的需求,可以结合operator.itemgetter和sorted的内置reverse参数完成,完全不需要使用lambda表达式:
具体实现代码
from operator import itemgetter # 等效于 sorted(dict.items(), key=lambda i: -i[1]) sorted_result = sorted(your_dict.items(), key=itemgetter(1), reverse=True)
原理解释
itemgetter(1)会自动提取每个键值对元组的第二个元素(即字典的值)作为排序键,功能和lambda i: i[1]完全一致reverse=True指定排序结果为降序,等价于原写法中对排序键取负的降序效果
运行验证示例
你可以用以下代码验证两种写法的输出完全一致:
test_dict = {"apple": 5, "banana": 2, "orange": 4, "grape": 7} # 原lambda写法 print(sorted(test_dict.items(), key=lambda i: -i[1])) # 输出:[('grape', 7), ('apple', 5), ('orange', 4), ('banana', 2)] # 替代写法 from operator import itemgetter print(sorted(test_dict.items(), key=itemgetter(1), reverse=True)) # 输出:[('grape', 7), ('apple', 5), ('orange', 4), ('banana', 2)]
之前使用operator结果异常的原因
大概率是没有添加reverse=True参数,默认使用升序排序导致结果和预期相反。
内容的提问来源于stack exchange,提问作者mangotango
相关产品推荐
相关产品推荐

