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

