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
相关产品推荐
相关产品推荐

