Python按嵌套blogLikes字段排序字典列表报错解决
错误原因分析
- 第一版代码
k[-1]触发KeyError:sorted遍历json_data时,传入lambda的参数k是外层列表中的单个字典元素,并非列表,字典不支持用-1作为键取值,因此直接报错。 - 第二版代码用
d['instanceData']作为排序键触发类型错误:instanceData对应的值是存储字典的列表,Python原生不支持直接比较两个字典实例的大小,因此抛出<操作符不支持的错误。 - 第三版代码用
list(d.keys())作为排序键结果不符合预期:该逻辑实际是按照字典的键名列表做排序,完全没有用到目标字段blogLikes,自然无法得到想要的结果。
正确实现代码
排序时需要准确取到嵌套结构中的blogLikes字段,注意该字段当前是字符串格式,必须转为整数再比较,否则会按照字符串字典序排序出现数值逻辑错误;添加reverse=True参数即可实现降序排列。
def sort_dict(json_data): sorted_data = sorted( json_data, # 按嵌套的blogLikes整数值排序 key=lambda item: int(item['instanceData'][0]['blogLikes']), reverse=True # 开启降序,不传该参数默认是升序 ) print(sorted_data) return JsonResponse({"sorted_result": sorted_data})
运行上述代码后,输出的排序结果和预期完全一致:按blogLikes从高到低排列,顺序为instanceId=17、instanceId=3、instanceId=19。
补充说明:如果后续
instanceData列表中可能存在多个元素,需要根据业务需求调整排序键的取值逻辑,比如取列表中blogLikes的最大值、总和作为排序依据即可,当前示例数据中每个instanceData仅含1个元素,上述代码可以直接运行使用。
内容的提问来源于stack exchange,提问作者ded
相关产品推荐
相关产品推荐

