Как обращаться к ключу словаря, который вложен в список в json файле?

Рейтинг: 1Ответов: 1Опубликовано: 15.07.2023

У меня есть словарь в json файле:

{
  "Oshein": [
    {
      "13195": {
        "ФИО:": "Харчев Андрей Денисович"
        "Дата рождения:": "14.08.2007",
        "Дата получения паспорта:": "29.05.2022",
        "Город получения паспорта:": "Самара"
      }
    },
    {
      "21064": {
        "ФИО:": "Дорогин Михаил Дмитриевич",
        "Дата рождения:": "12.09.2008",
        "Дата получения паспорта:": "23.08.2023",
        "Город получения паспорта:": "Москва"
      }
    }
  ]
}

Как можно обращаться к главному ключу (номера, например: 13195), если весь этот список записан в json файл. Так как "Oshein" тоже является ключом (потому что записан в json файл), то я пытался по двум ключам, то есть:

with open('Oshein.json', 'r', encoding='utf-8') as data:
f = json.load(data)
f['Oshein']['13195']

Но выводит ошибку: TypeError: list indices must be integers or slices, not str. Какие ещё существуют способы обращения к ключу? Заранее, спасибо!

Ответы

▲ 1

Немного переформатирую ваш json и сразу объясню где что:

{ <-- словарь
  "Oshein": 
  [ <-- список
    { <-- словарь
      "13195": 
      { <-- словарь
        "ФИО:": "Харчев Андрей Денисович"

Собственно, в ошибке у вас всё написано - вы пропустили доступ к списку, по которому нужно ещё итерироваться по-хорошему. Как-то так:

for item in f['Oshein']:
    data = item.get('13195')
    if data:
        print(data)

Если бы элемент в списке был один, можно было бы написать просто f['Oshein'][0]['13195'], но у вас там несколько элементов и не факт, что нужный вам словарь будет именно в первом же списке, поэтому по-хорошему нужно перебирать словари внутри списка.