2014-06-20 111 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

相關問題