如何在Python中找到JSON列表中哪个项对给定属性具有最大值?

2024-10-01 17:41:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用来自SFG WorldCup 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”属性是最大的,因为这将是最新的目标。在

如何按这样的特定属性进行排序?在

我看过this question,但我实在搞不懂答案。在

编辑:重新措辞,很抱歉给你带来了混乱。在

我不需要重新排列它们,但是如何识别列表中哪个条目的id最大,并使用它呢?在


Tags: ofeventidjson属性time排序type
2条回答

这是我的解决方案,它使用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

输出:

^{pr2}$

讨论

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

如果您想要列表中的“最X”项,其中X是“最近的”或任何其他项,可以使用^{},它可以采用可选的键函数。^{}在本例中是您想要的:

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

或者(正如Martijn和Burhan指出的那样),如果您可以保证字典列表已经按id排序,那么只需获取最后一个字典就可以了:

^{pr2}$

相关问题 更多 >

    热门问题