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

Python:如何按字典键对列表排序?为何触发TypeError?

问题分析与解决

问题背景

现有列表:

L = ['Jack', 'King', '9', 'King', '10']

字典:

D = {0:'Ace', 1:'King', 2:'Queen', 3:'Jack', 4:'10', 5:'9'}

需求是依据字典D的键对列表L排序,期望输出:[ 'King', 'King', 'Jack', '10', '9' ]。

尝试执行以下代码:

sorted(L, key = D.get)

触发错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in 

----> 3 sorted(L, key = D.get)

TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'

错误原因

你说的没错,字典D的键确实都是整数,但问题出在D.get的用法上:

  • D.get(x)的作用是以x为键去字典D中查找对应的值,而列表L里的元素是D的值(比如'Jack'、'King'这类字符串),并不是D的键(整数0-5)。
  • 用这些字符串去查D,根本找不到对应的键,所以D.get会返回None。
  • 当sorted函数尝试用这些None值作为排序依据时,Python无法比较NoneType实例,就会抛出你看到的TypeError。

正确解决方法

要实现需求,需要先反转字典D,把原字典的“值”作为新字典的“键”,原字典的“键”作为新字典的“值”——因为D里的所有值都是唯一的,所以反转不会有冲突:

# 反转字典,生成值到键的映射
rev_D = {v: k for k, v in D.items()}
# 用反转后的字典获取排序依据
sorted_L = sorted(L, key=rev_D.get)
print(sorted_L)  # 输出: ['King', 'King', 'Jack', '10', '9']

关于反转字典映射

如果遇到值不唯一的字典,反转时需要处理冲突(比如把相同值对应的键存为列表),但在这个场景里D的值都是唯一的,用字典推导式就能直接完成反转。

内容的提问来源于stack exchange,提问作者nilsinelabore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:42:49