#python #list #object
#python #Список #объект
Вопрос:
У меня есть файл json, и я читаю этот файл с json
библиотекой
Это содержимое json (пример)
{
"type": "champion",
"format": "standAloneComplex",
"version": "10.18.1",
"data": {
"Aatrox": {
"version": "10.18.1",
"id": "Aatrox",
"key": "266",
"name": "Aatrox"
},
"Ahri": {
"version": "10.18.1",
"id": "Ahri",
"key": "103",
"name": "Ahri",
},
}
Теперь, как я могу проверить, key
равно ли 266, и вернуть значение name
?
Я пытался с чем-то вроде этого
import json
with open('./source/champion.json') as json_file:
data_champs = json.load(json_file)['data']
for champ in data_champs:
for champ_info in data_champs[champ]:
if champ['key'] == 266:
print(champ)
Но возвращает ошибку типа: строковые индексы должны быть целыми числами
Ответ №1:
Попробуйте следующее:
import json
with open('./source/champion.json') as json_file:
for name, info in json.load(json_file)['data'].items():
if info['key'] == 266:
print(name)
Или, что еще лучше, мы можем закрыть файл после получения данных и не держать его открытым во время обработки:
import json
with open('./source/champion.json') as json_file:
data = json.load(json_file)['data']
for name, info in data.items():
if info['key'] == 266:
print(name)
Объяснение
Самый простой способ выполнить итерацию по dict
элементам a — это использовать его .items()
метод:
for key, value in d.items():
print(key, "-->", value)
Ответ №2:
ниже (повторяем только значения, поскольку ключи здесь не важны)
import json
with open('data.json') as f:
data = json.load(f)['data']
for v in data.values():
if v['key'] == '266':
print(v['name'])
break
вывод
Aatrox
Ответ №3:
Вот и все:
import json
with open('champion.json') as json_file:
data_champs = json.load(json_file)['data']
for data in data_champs.keys():
if data_champs[data]['key']=='266':
print(data_champs[data]['name'])
С принтами:
Aatrox