繁体   English   中英

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

[英]Python - Check if value is equal to returned json response

告诉我我的措辞不好。 我正在从英雄联盟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变得很长,则对每行进行硬编码将很痛苦。 有没有办法做到“更好”或更一致? 抱歉,如果我要到达这里,我们将不胜感激!

您的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'])

您可以过滤指定ID的结果列表,并选择找到的第一个元素。

nautilus_id = 111
try:
    nautilus = filter(lambda c: c['id'] == nautilus_id, champ_list)[0]
except:
    nautilus = None

从那里,您可以访问nautilus中的所有数据:

print nautilus['stats']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM