Python3 sorted排序字典报dict不支持<比较TypeError咨询
报错原因
这个错误的触发逻辑非常明确:
Python 3 移除了不同类型对象之间的隐式比较规则,任意两个dict类型实例本身没有定义<大小比较的实现,而你写的排序逻辑里,给sorted()传入的排序key是lambda item: item[1],也就是取ProductReport每个键值对的值作为排序依据——这说明你的ProductReport字典中,至少存在两个条目的值是dict类型,排序过程中对比两个值的大小时,就会抛出「dict和dict之间不支持<比较」的TypeError。
举个会触发这个报错的最简例子:
ProductReport = { "sku1": {"stock": 12, "sales": 300}, "sku2": {"stock": 5, "sales": 420} } # 下面这行就会报你遇到的错,因为item[1]是两个dict sorted(ProductReport.items(), key=lambda item: item[1])
修复方法
根据你的实际业务需求选对应方案即可:
- 如果你的预期是按值字典里的某个具体业务字段排序,直接把排序key的取值路径写到对应可比较的字段上即可,这是最常用的修复方式:
# 示例:按销售额sales字段升序排序,item[1]["sales"]是整数,支持比较 for key, value in sorted(ProductReport.items(), key=lambda item: item[1]["sales"]):
- 如果你需要兼容值类型混杂(既有基础类型、又有dict)的场景,可以给dict类型的值加一层可比较的兜底转换,避免排序中断:
def get_sort_key(item): val = item[1] # dict类型转成可比较的字符串作为排序依据,其他类型直接返回原值 return str(val) if isinstance(val, dict) else val for key, value in sorted(ProductReport.items(), key=get_sort_key):
- 如果你原本预期
ProductReport的值是数字、字符串这类可直接比较的基础类型,先逐行检查给ProductReport赋值的前置逻辑,排查为什么值会变成dict,修正赋值逻辑后保证排序key返回的是同类型、支持大小比较的值(整数、浮点数、字符串、由可比较类型组成的元组都可以),就能解决问题。
内容的提问来源于stack exchange,提问作者CTB
相关产品推荐
相关产品推荐

