2014-06-20 114 views
2

我正在使用SFG WorldCup API的JSON数据。如何查找JSON列表中的哪个项目对于Python中的给定属性具有最大值?

我需要做的是找出给定比赛中给定球队得分的最新进球。要做到这一点,我需要按照away_team_events属性的属性数组的每个元素中的attribute键的值进行排序。

让我来说明一下。

下面是法国从正在进行的(写作的时候)法国v瑞士的法国样本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,并使用它?

+1

但它似乎已经排序。 – Fabricator

+0

@ChristianBerendt:这是*字典列表*。 –

+0

它已经是一个列表,并假设其已填充生活,那么它将按照实际事件的顺序;所以最后的_event_将成为列表中的最后一项。 –

回答

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 

输出:

{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最大的项目
1

如果您想要列表中的“最X”项目,其中X是“最近”或其他任何项目,您可以使用max(),它可以采用可选的按键功能。 operator.itemgetter()是你在这种情况下想要的:

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

或(如马亭和布尔汗指出),如果你能保证词典列表已经被id排序,刚刚起步的最后一个生效:

latest_goal = data["away_team_events"][-1] 
+0

那么'latest_goal'变量会包含一个清单? – evamvid

+0

@evamvid不,它只是满足你的标准的字典。 –

+0

我今天遇到问题:Traceback说'Traceback(最近一次调用最后):文件“C:\ Users \ User \ Docs \ Programming \ WC.py”,第28行, goalindex = max(math ['home_team_events '],key = itemgetter(“id”))TypeError:'Response'对象没有属性'__getitem __''。所以它似乎是我得到的JSON的问题.... – evamvid

相关问题