2016-11-13 90 views
1

首先,我爲標題感到抱歉,我不知道如何具體說明我的問題。從JSON中找到價值

好的,我正在做一些關於英雄聯盟的API。數據顯示爲Json,它可以被發現here,我想要做的就是循環它。我有來自另一個腳本的數據,顯示每個球員在比賽中的統計數據。在這些數據中,冠軍正在進行身份驗證。我想使用該Id並與上面的json文件中的每個鍵進行比較,如果它找到匹配的鍵 - id我可以獲得冠軍的名稱。我的問題是,我不知道如何迭代它們中的每一個,因爲正如你在文件中看到的那樣,有THIS(因爲我無法獲得縮進權限,所以發佈了一張圖片。

我可以訪問每個人的ID嗎?因爲,正如你所看到的,每一個人都有不同的名字(Jax,Sona,Tristana等等......)我只是想要每個人的鑰匙和名字。對於循環,但不能連排行榜第1名,所以我很失去了這一次感謝所有幫助:)

代碼:

champ_r = requests.get("https://global.api.pvp.net/api/lol/static-data/lan/v1.2/champion?" 
          "api_key=").json() 


for x in champ_r['data'][0]: 
    pprint(x['id']) 

如果我運行它像我得到一個KeyError: 0,如果我刪除它,我得到TypeError: string indices must be integers

作爲輸出,我希望它返回每個冠軍的ID和名稱。例如:

Aatrox - Key 
Ahri - Key... 

...等等。

+0

顯示你的代碼。用更實際的例子解釋預期的輸出是什麼。 – idjaw

+0

@idjaw對不起,沒想到代碼在這個問題上是必須的。我更新了它。 – Aguxez

回答

3

基礎的在您嘗試獲取的輸出示例中,字典的「鍵」實際上是您正在查找的名稱,與該鍵關聯的值是字典。您正在查找該字典中的「密鑰」密鑰。所以,當你迭代字典時,你的實際上是一個字典。通過在迭代中使用項目方法,可以使您的迭代變得輕鬆。此外,您的所有數據都存儲在您的大json響應的「數據」鍵中。所以,你的代碼應該是這樣的:

for key, value in champ_r['data'].items(): 
    print(key, value['key']) 

第幾行的輸出示例:

Sona 37 
Draven 119 
FiddleSticks 9 
Volibear 106 
Pantheon 80 
Singed 27 
Vladimir 8 
Ekko 245 
+1

啊,這個伎倆,不知道這個方法。非常感謝:)我必須使用另一個json文件,因爲第一個顯示我的api密鑰。 – Aguxez

4

您得到的錯誤是因爲champ_r['data']中沒有0元素。這是一本冠軍名字的字典。因此,獲得冠軍的關鍵應該像champ_r['data']['Ahri']['key']一樣完成。你需要知道的另一件事是,通過詞典循環給你的關鍵,而不是價值,所以你的循環應該是這樣的:

for champ_name in champ_r['data']: 
    print (champ_name) 
    pprint(champ_r['data'][champ_name]) 
0

你可以嘗試這一個班輪:result = {value['key']: value['name'] for key, value in champ_r['data'].items()}