@Archer161

Python. Как извлечь все данные вложенных словарей, имеющих одну общую пару ключ: значение?

Извлекаю данные о фильмах с кинопоиска. Столкнулся с проблемой с извлечением актеров. Вот фрагмент полученного JSON:

"$Film:927495.releaseOptions":{"isImax":false,"is3d":false,"__typename":"ReleaseOptions"},
"Person:3061538":{"id":3061538,"name":"Тэрон Эджертон","originalName":"Taron Egerton","__typename":"Person"},
"$Film:927495.members({\\"limit\\":10,\\"role\\":[\\"ACTOR\\",\\"CAMEO\\",\\"UNCREDITED\\"]}).items.0":{"person":{"type":"id","generated":false,"id":"Person:3061538","typename":"Person"},"__typename":"FilmCrewMember"},
"Person:514":{"id":514,"name":"Джейми Фокс","originalName":"Jamie Foxx","__typename":"Person"},
"$Film:927495.members({\\"limit\\":10,\\"role\\":[\\"ACTOR\\",\\"CAMEO\\",\\"UNCREDITED\\"]}).items.1":{"person":{"type":"id","generated":false,"id":"Person:514","typename":"Person"},"__typename":"FilmCrewMember"},
"Person:10315":{"id":10315,"name":"Бен Мендельсон","originalName":"Ben Mendelsohn","__typename":"Person"},
"$Film:927495.members({\\"limit\\":10,\\"role\\":[\\"ACTOR\\",\\"CAMEO\\",\\"UNCREDITED\\"]}).items.2":{"person":{"type":"id","generated":false,"id":"Person:10315","typename":"Person"},"__typename":"FilmCrewMember"},
"Person:1188127":{"id":1188127,"name":"Ив Хьюсон","originalName":"Eve Hewson","__typename":"Person"}

Как получить все данные словарей, имеющих общую пару: __typename":"Person"?
  • Вопрос задан
  • 191 просмотр
Решения вопроса 1
@PavelMos
Перебрать элементы первого уровня через for i in dict, в нём проверить через dict1[i].keys() наличие ключа __typename, если такой ключ существует, проверить его значение.

import pprint
pprint.pprint (dict1)
for i in dict1:
    if '__typename' in dict1[i].keys():
        if dict1[i]['__typename']=='Person':
            print ('Match on: ',i)
            print (dict1[i])


Если __typename: Person будет в элементах другого уровня, скрипт нужно переделывать, например, сначала выяснить максимальную вложенность элемента и затем проверять по всем уровням
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы