簡體   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