Python проверяет значение ключа в элементе и возвращает элемент в списке

#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