Python中使用operator.itemgetter排序字典结果不符求助
问题分析与解决方案
你遇到的问题核心是排序对象选错了,咱们一步步拆解清楚:
为什么输出不符合预期?
当你直接对字典mydict调用sorted()时,默认迭代的是字典的键(也就是'carl'、'alan'这类字符串)。这时候key=operator.itemgetter(1)的作用是取每个键字符串的索引为1的字符作为排序依据,而不是你想要的字典对应的值!
举个具体的例子:
'bob'的索引1字符是'o''alan'的索引1字符是'l''carl'的索引1字符是'a''danny'的索引1字符是'a'
这种排序逻辑自然和你预期的「按值从小到大排序」完全不符,才会出现混乱的输出。
修正后的代码
要按字典的值排序,你需要迭代字典的键值对(通过mydict.items()方法),这样operator.itemgetter(1)才能取到每个元组里的数值(也就是字典的值):
import operator mydict = {'carl': 4, 'alan': 2, 'bob': 1, 'danny': 3} # 对键值对元组排序,而非直接对键排序 for key, value in sorted(mydict.items(), key=operator.itemgetter(1), reverse=False): print("%s: %d" % (key, value))
验证输出
运行修正后的代码,就能得到你预期的结果:
bob: 1 alan: 2 danny: 3 carl: 4
另外补充一个更直观的写法——不用operator.itemgetter,改用lambda表达式,可读性会更强:
for key, value in sorted(mydict.items(), key=lambda x: x[1], reverse=False): print("%s: %d" % (key, value))
内容的提问来源于stack exchange,提问作者Chelseajcole
相关产品推荐
相关产品推荐

