2016-11-13 52 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()}