从JSON

时间:2016-11-13 02:07:58

标签: python json

首先,我很抱歉这个头衔,我不知道如何具体说明我的问题。

好的,我正在使用英雄联盟API。数据显示为Json,可以找到here,我想要做的就是遍历它。我有来自另一个脚本的数据,显示每个玩家在比赛中的统计数据。在这些统计数据中,有一个冠军正在玩的身份证。我想使用该Id并与上面的json文件中的每个键进行比较,如果找到匹配的键 - id,我可以得到冠军的名字。我的问题是我不确切地知道如何迭代它们中的每一个,因为你可以在文件上看到THIS(发布图像因为我无法得到缩进。< / p>

如何访问每个ID?因为,正如你所看到的,每个人都有不同的名字(Jax,Sona,Tristana等......)我只想要每个人的钥匙和名字。我尝试使用For循环,但甚至无法列出第一个,所以这次我很丢失。感谢您的帮助:))

代码:

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...

......等等。

3 个答案:

答案 0 :(得分: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])

答案 1 :(得分:3)

根据您尝试获取的示例输出,字典的“键”实际上是您要查找的名称,与该键关联的值是字典。您正在寻找该词典中的“密钥”密钥。因此,当您在字典上进行迭代时,实际上是一个字典。通过在迭代中使用 items 方法,您可以轻松地对您进行迭代。

此外,您的所有数据都存储在大json响应的“data”键中。所以,你的代码应该是这样的:

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

答案 2 :(得分:0)

你可以试试这个单行:result = {value['key']: value['name'] for key, value in champ_r['data'].items()}