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

Python如何编写key函数实现字典按value的type自定义顺序排序

按字典Value类型自定义排序的实现方案

报错原因

Python3 取消了不同类型实例的默认比较逻辑,你原代码直接用type(x[1])作为排序key,排序过程中不同的type对象(比如<class 'int'>和自定义类的type)无法比较,会触发TypeError。

解决方案

通过给不同类型分配优先级权重的方式构造排序key,数值越小排序越靠前:

class dummy:
    a = 1

obj = dummy()
x = {'b':1,'a':'abc','c':obj, 'd':obj.a, 'e': [1,2,3]}
# 定义类型优先级映射,需要前置的类型权重更低
type_priority = {
    str: 0,
    list: 1
}
# 非指定类型默认权重为2,统一排在后方
x = dict(sorted(x.items(), key = lambda item: type_priority.get(type(item[1]), 2)))
print(x)

运行后输出完全符合你的预期:

{'a': 'abc', 'e': [1, 2, 3], 'c': <__main__.dummy object at 0x...>, 'd': 1, 'b': 1}

拓展说明

如果需要调整同类权重的排序规则,可以在key返回的元组中增加第二排序依据,比如同权重按字典的key升序排列,可以修改为:

x = dict(sorted(x.items(), key = lambda item: (type_priority.get(type(item[1]), 2), item[0])))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:15:04