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

Python字典列表多键排序报错及目标输出实现需求

解决Python字典列表多键排序的类型错误问题

问题背景

原始字典列表:

a = [{"name":"sri","rank":5},{"name":"harish","rank":1},{"name":"adhya","rank":5},{"name":"mathi","rank":"NUL"}]

尝试执行多键排序代码时触发类型错误:

print(sorted(a,key=lambda i: (i['rank'], i['name'])) )

报错信息:

TypeError: '<' not supported between instances of 'str' and 'int'

报错原因:字典中的rank字段同时存在整数(如1、5)和字符串("NUL")类型,Python无法直接比较不同类型的值,导致排序失败。

期望排序结果:

[{"name":"harish","rank":1},{"name":"adhya","rank":5},{"name":"sri","rank":5},{"name":"mathi","rank":"NUL"}]

解决方案

通过统一rank字段的可比较类型来修复错误,将非整数的"NUL"映射为一个极大值(如float('inf')),确保它排在所有整数rank之后,再按name字段排序。

基础实现代码

a = [{"name":"sri","rank":5},{"name":"harish","rank":1},{"name":"adhya","rank":5},{"name":"mathi","rank":"NUL"}]
sorted_result = sorted(a, key=lambda i: (int(i['rank']) if i['rank'] != "NUL" else float('inf'), i['name']))
print(sorted_result)

通用健壮版(适配更多非数字rank值)

如果rank字段可能存在其他非数字字符串,可通过异常捕获统一处理:

def parse_rank(rank_val):
    try:
        return int(rank_val)
    except ValueError:
        # 所有无法转为整数的rank都放到最后
        return float('inf')

a = [{"name":"sri","rank":5},{"name":"harish","rank":1},{"name":"adhya","rank":5},{"name":"mathi","rank":"NUL"}]
sorted_result = sorted(a, key=lambda i: (parse_rank(i['rank']), i['name']))
print(sorted_result)

两种方式都能输出符合预期的排序结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:10:32