告诉我,如果我措辞不好。我正在调用英雄联盟API的json回复。我得到了一个看起来像这样的回复。
{
"champions": [
{
"id": 111,
"stats": {
"maxChampionsKilled": 2,
"maxNumDeaths": 5,
"mostChampionKillsPerSession": 2,
"mostSpellsCast": 0,
"totalAssists": 25,
"totalChampionKills": 2,
"totalDamageDealt": 40838,
"totalDamageTaken": 27900,
"totalDeathsPerSession": 5,
"totalDoubleKills": 0,
"totalFirstBlood": 0,
"totalGoldEarned": 11070,
"totalMagicDamageDealt": 21083,
"totalMinionKills": 56,
"totalPentaKills": 0,
"totalPhysicalDamageDealt": 12876,
"totalQuadraKills": 0,
"totalSessionsLost": 1,
"totalSessionsPlayed": 1,
"totalSessionsWon": 0,
"totalTripleKills": 0,
"totalTurretsKilled": 1,
"totalUnrealKills": 0
}
},
目前我有一个像这样的列表:champ_list []并且我在此列表中拥有所有id(在本例中为111)。如此完成它将类似于champ_list [111,67,4,23],它可以不断增长到游戏中的冠军数量。
然后我执行以下操作:
if '111' in champ_list:
print("Nautilus")
以下是问题 - 如果上述陈述是真的并打印了Nautilus,我如何获得{stats},{totalSessionsPlayed}来打印其值?我意识到我可以添加
print(['champions'][0]['stats']['totalSessionsPlayed']
到我上面的陈述结尾,但是如果返回数据不是保持相同的顺序我就是我的骨头。此外,如果champ_list变得很长,那么对每一行进行硬编码会很麻烦。有没有办法做到“更好”或更一致?对不起,如果我到达这里,但非常感谢任何帮助!
答案 0 :(得分:1)
您的JSON间接存储将111
映射到相应stat块的关联列表。您应该首先将其转换为适当的Python映射(即dict
):
json_data = { ... }
champions = {}
for d in json_data['champions']:
champions[d['id']] = d['stats']
现在给定champ_id = '111'
,您只需编写
print(champions[champ_id]['totalSessionsPlayed'])
答案 1 :(得分:0)
您可以过滤指定ID的结果列表,并选择第一个元素(如果找到)。
nautilus_id = 111
try:
nautilus = filter(lambda c: c['id'] == nautilus_id, champ_list)[0]
except:
nautilus = None
从那里你可以访问nautilus中的所有数据:
print nautilus['stats']