首先,我很抱歉这个头衔,我不知道如何具体说明我的问题。
好的,我正在使用英雄联盟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...
......等等。
答案 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()}