Python - 检查值是否等于返回的json响应

时间:2017-01-19 14:36:59

标签: python json list

告诉我,如果我措辞不好。我正在调用英雄联盟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变得很长,那么对每一行进行硬编码会很麻烦。有没有办法做到“更好”或更一致?对不起,如果我到达这里,但非常感谢任何帮助!

2 个答案:

答案 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']