如何在Python中找到JSON列表中某个属性值最大的项?
我正在使用来自 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_eventsevents['away_team_events']
是一个包含 7 个项目的列表。我们要从这个列表中选择一个事件 ID 最大的项目