如何在Python中找到JSON列表中某个属性值最大的项?

3 投票
2 回答
12896 浏览
提问于 2025-04-18 10:34

我正在使用来自 SFG 世界杯 API 的 JSON 数据。

我需要做的是找到某个球队在某场比赛中最近进的球。为此,我需要根据每个元素中 away_team_events 属性的 attribute 键的值进行排序。

让我举个例子。

这是正在进行的法国对瑞士比赛中,法国的示例 JSON 数据。

"away_team_events": [
            {
                "id": 276, 
                "type_of_event": "goal", 
                "player": "Giroud", 
                "time": "17"
            }, 
            {
                "id": 277, 
                "type_of_event": "goal", 
                "player": "Matuidi", 
                "time": "18"
            }, 
            {
                "id": 278, 
                "type_of_event": "penalty-wrong", 
                "player": "Benzema", 
                "time": "32"
            }, 
            {
                "id": 279, 
                "type_of_event": "goal", 
                "player": "Valbuena", 
                "time": "40"
            }, 
            {
                "id": 281, 
                "type_of_event": "substitution-in", 
                "player": "Pogba", 
                "time": "63"
            }, 
            {
                "id": 282, 
                "type_of_event": "substitution-in", 
                "player": "Koscielny", 
                "time": "66"
            }, 
            {
                "id": 283, 
                "type_of_event": "goal", 
                "player": "Benzema", 
                "time": "67"
            }
        ]

所以我需要做的就是找出哪个 "id" 属性的值最大,因为那就是最近的进球。

我该如何按特定属性进行排序呢?

我看到过 这个问题,但我对答案有点看不懂。

编辑:重新表述一下,抱歉让人困惑。

我不一定需要重新排列它们,但我该如何识别列表中哪个项目的 id 最大,并使用那个呢?

2 个回答

1

如果你想在一个列表中找到“最X”的项目,其中X可以是“最近”或者其他任何东西,你可以使用max()这个函数。这个函数可以接受一个可选的关键字函数。在这种情况下,你可以使用operator.itemgetter()

from operator import itemgetter
data = json.loads("whatever")
latest_goal = max(data["away_team_events"], key=itemgetter("id"))

或者(正如Martijn和Burhan所提到的),如果你能保证这个字典列表已经按照id排序,那么只需要获取最后一个就可以了:

latest_goal = data["away_team_events"][-1]
5

这是我的解决方案,它使用了 max() 函数。我只需要告诉 max 怎么排序,在这个例子中,是按照 id 字段来排序的:

import json
with open('events.json') as f:
    events = json.load(f)
    event = max(events['away_team_events'], key=lambda ev: ev['id'])
    print event

输出结果:

{u'type_of_event': u'goal', u'player': u'Benzema', u'id': 283, u'time': u'67'}

讨论

  • events 是一个 JSON 数据,里面只有一个键:away_team_events
  • events['away_team_events'] 是一个包含 7 个项目的列表。我们要从这个列表中选择一个事件 ID 最大的项目

撰写回答