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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:21:27