You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:37:43