[英]Python: Check is each value is between/equal to 0 to 3 in the tuple?
[英]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.