2016-11-22 44 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 
相关问题