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

如何用Python/JMESPath按2024年期末成绩对学生列表排序?

按2024年期末成绩排序学生列表的JMESPath解决方案

你可以用JMESPath的sort_by结合过滤表达式实现需求,核心是先从每个学生的grades数组中提取2024年的期末成绩,再以此为依据排序。

JMESPath表达式

升序排序

sort_by(students, &(grades[?year == 2024].final)[0])

降序排序(反转升序结果)

reverse(sort_by(students, &(grades[?year == 2024].final)[0]))

表达式解释

  • sort_by(students, &...):对students数组执行排序,&用于引用当前遍历到的学生对象,后续表达式是排序依据。
  • grades[?year == 2024]:过滤当前学生的grades数组,仅保留year等于2024的成绩条目。
  • .final:提取过滤后成绩条目的final属性,得到单元素数组(如[85])。
  • [0]:取该数组的第一个元素,即2024年期末成绩,作为排序的键值。

Python中使用JMESPath的示例代码

如果用Python的jmespath库执行表达式,可参考以下代码:

import jmespath

# 目标数据
data = {
    "school": "lame",
    "students": [
        {"id": 1, "name": "Joe", "grades": [{"year": 2024, "final": 85}, {"year": 2023, "final": 73}]},
        {"id": 2, "name": "Pedro", "grades": [{"year": 2024, "final": 92}, {"year": 2023, "final": 90}]},
        {"id": 3, "name": "Mary", "grades": [{"year": 2024, "final": 88}, {"year": 2023, "final": 70}]}
    ]
}

# 升序排序结果
sorted_asc = jmespath.search('sort_by(students, &(grades[?year == 2024].final)[0])', data)
# 降序排序结果
sorted_desc = jmespath.search('reverse(sort_by(students, &(grades[?year == 2024].final)[0]))', data)

print("升序排序结果:")
for student in sorted_asc:
    print(f"{student['name']}: {student['grades'][0]['final']}")

print("\n降序排序结果:")
for student in sorted_desc:
    print(f"{student['name']}: {student['grades'][0]['final']}")

输出结果

升序排序后顺序:

  • Joe: 85
  • Mary: 88
  • Pedro: 92

降序排序后顺序:

  • Pedro: 92
  • Mary: 88
  • Joe: 85

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:13:15