2016-11-22 91 views
0

現在(如果我沒有錯)我有一個列表的一些信息的詞典;我想從列表中獲得特定項目,但我遇到了需要的項目;這是我想要的:Python - 如何從列表中獲取項目?

stats = requests.get("https://lan.api.pvp.net/api/lol/lan/v1.3/stats/by-summoner/24244/" 
        "summary?season=SEASON2016&api_key=").json() 

pprint([d['playerStatSummaries'] for d in stats if 'playerStatSummaryType' in d]) 

我試着通過看一些例子;它可以工作,但也許我在錯誤的道路正在做的,輸出僅僅是一個「[]」要求有這樣的信息:

"summonerId": 24244, 
"playerStatSummaries": [ 

    { 
     "playerStatSummaryType": "CAP5x5", 
     "wins": 20, 
     "modifyDate": 1453305771000, 
     "aggregatedStats": { 
      "totalChampionKills": 308, 
      "totalMinionKills": 4985, 
      "totalTurretsKilled": 36, 
      "totalNeutralMinionsKilled": 466, 
      "totalAssists": 255 
     } 
    }, 
    { 
     "playerStatSummaryType": "CoopVsAI", 
     "wins": 34, 
     "modifyDate": 1453305771000, 
     "aggregatedStats": { 
      "totalChampionKills": 394, 
      "totalMinionKills": 2741, 
      "totalTurretsKilled": 57, 
      "totalNeutralMinionsKilled": 146, 
      "totalAssists": 336 
     } 
    }, 
    { 
     "playerStatSummaryType": "CoopVsAI3x3", 
     "wins": 1, 
     "modifyDate": 1453305771000, 
     "aggregatedStats": { 
      "totalChampionKills": 6, 
      "totalMinionKills": 69, 
      "totalTurretsKilled": 2, 
      "totalNeutralMinionsKilled": 0, 
      "totalAssists": 3 
     } 
    }, 
    { 
     "playerStatSummaryType": "RankedTeam3x3", 
     "wins": 0, 
     "losses": 0, 
     "modifyDate": 1353893998000, 
     "aggregatedStats": { } 
    }, 
    { 
     "playerStatSummaryType": "RankedTeam5x5", 
     "wins": 0, 
     "losses": 0, 
     "modifyDate": 1354061714000, 
     "aggregatedStats": { } 
    } 

比方說,我要訪問CoopVsAI的」信息「這是第二個;從那我想訪問「totalChampionKills」;我怎樣才能做到這一點?因爲它們是嵌套的,所以我不確定如何去做。我試過了

for key, value in stats['playerStatSummaries'].items(): 
    if key['playerStatSummaryType'] == "Unranked": 
     # do something 

但是沒有成功,所以;就是這樣,謝謝你可以提供任何幫助:)

+0

從本質上講,你的 「CoopVsAI」 的問題,你會訪問它爲'統計[ 'playerStatSummaries'] [1] ['aggregatedStats '] [' totalChampionKills']'。儘管如此,我不能100%確定是否可以用Python來訪問它。 – SpencerD

回答

1

"playerStatSummaries"保存list值而不是dict。因此,您for循環應該是這樣的:

#   v This will be `dict` object 
for player_stat_summary in stats['playerStatSummaries']: 
    if player_stat_summary['playerStatSummaryType'] == "Unranked": 
     # Do Something 

     # player_stat_summary['aggregatedStats']['totalChampionKills'] 
     # For accessing the value you require 
+1

嗯,它的工作原理,我不知道爲什麼我總是有字典問題,仍然學習如何處理它們:P Btw,編輯IF以匹配for循環名稱。 – Aguxez

+0

@fuhrerguxez:謝謝你指出。更新。 –

1

假設你stats作爲

stats ={"summonerId": 24244, 
"playerStatSummaries": [ 

    { 
     "playerStatSummaryType": "CAP5x5", 
     "wins": 20, 
     "modifyDate": 1453305771000, 
     "aggregatedStats": { 
      "totalChampionKills": 308, 
      "totalMinionKills": 4985, 
      "totalTurretsKilled": 36, 
      "totalNeutralMinionsKilled": 466, 
      "totalAssists": 255 
     } 
    }, 
    { 
     "playerStatSummaryType": "CoopVsAI", 
     "wins": 34, 
     "modifyDate": 1453305771000, 
     "aggregatedStats": { 
      "totalChampionKills": 394, 
      "totalMinionKills": 2741, 
      "totalTurretsKilled": 57, 
      "totalNeutralMinionsKilled": 146, 
      "totalAssists": 336 
     } 
    }, 
    { 
     "playerStatSummaryType": "CoopVsAI3x3", 
     "wins": 1, 
     "modifyDate": 1453305771000, 
     "aggregatedStats": { 
      "totalChampionKills": 6, 
      "totalMinionKills": 69, 
      "totalTurretsKilled": 2, 
      "totalNeutralMinionsKilled": 0, 
      "totalAssists": 3 
     } 
    }, 
    { 
     "playerStatSummaryType": "RankedTeam3x3", 
     "wins": 0, 
     "losses": 0, 
     "modifyDate": 1353893998000, 
     "aggregatedStats": { } 
    }, 
    { 
     "playerStatSummaryType": "RankedTeam5x5", 
     "wins": 0, 
     "losses": 0, 
     "modifyDate": 1354061714000, 
     "aggregatedStats": { } 
    } 
    ] 
} 

下面的工作

for stat in stats['playerStatSummaries']: 
    if(stat["playerStatSummaryType"] == 'CoopVsAI'): 
     print stat["aggregatedStats"]['totalChampionKills'] 
+0

這也行得通,可惜我只能選擇一個正確的答案,謝謝輸入無論如何男人! – Aguxez

+1

沒有問題,很高興我能提供幫助。 :) –

0

「playerStatSummaries」 這是內部對象的列表,爲什麼你不直接閱讀元素列表?

In [9]: a[1] 
Out[9]: 
{'aggregatedStats': {'totalAssists': 336, 
    'totalChampionKills': 394, 
    'totalMinionKills': 2741, 
    'totalNeutralMinionsKilled': 146, 
    'totalTurretsKilled': 57}, 
'modifyDate': 1453305771000, 
'playerStatSummaryType': 'CoopVsAI', 
'wins': 34} 

如果您需要更深層次的是同樣的操作

In [12]: a[1]['aggregatedStats']['totalChampionKills'] 
Out[12]: 394 
相關問題