3

我正在使用来自SFG WorldCup API的 JSON 数据。

我需要做的是找到给定球队在给定比赛中的最新进球。为此,我需要按attribute作为属性的属性的数组的每个元素中的键值进行排序away_team_events

让我来说明一下。

这是正在进行的(在撰写本文时)法国诉瑞士的法国 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,并使用它?

4

2 回答 2

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 的项目
于 2014-06-20T21:19:09.397 回答
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]
于 2014-06-20T21:02:55.210 回答