Как я могу напечатать определенные целочисленные переменные во вложенном словаре, используя Python? - PullRequest
1 голос
/ 03 ноября 2019

Это мой первый вопрос :)

Я зацикливаюсь на вложенном словаре для печати определенных значений. Я использую следующий код.

for i in lizzo_top_tracks['tracks']:
    print('Track Name: ' + i['name'])

Он работает для строковых переменных, но не работает для других переменных. Например, когда я использую следующий код для переменной даты:

for i in lizzo_top_tracks['tracks']:
    print('Album Release Date: ' + i['release_date'])

, я получаю сообщение, подобное этому KeyError: 'release_date'

Что мне делать?

Вот пример моего вложенного словаря:

{'tracks': [{'album': {'album_type': 'album',
    'artists': [{'external_urls': {'spotify': 'https://open.spotify.com/artist/56oDRnqbIiwx4mymNEv7dS'},
      'href': 'https://api.spotify.com/v1/artists/56oDRnqbIiwx4mymNEv7dS',
      'id': '56oDRnqbIiwx4mymNEv7dS',
      'name': 'Lizzo',
      'type': 'artist',
      'uri': 'spotify:artist:56oDRnqbIiwx4mymNEv7dS'}],
    'external_urls': {'spotify': 'https://open.spotify.com/album/74gSdSHe71q7urGWMMn3qB'},
    'href': 'https://api.spotify.com/v1/albums/74gSdSHe71q7urGWMMn3qB',
    'id': '74gSdSHe71q7urGWMMn3qB',
    'images': [{'height': 640,
      'width': 640}],
    'name': 'Cuz I Love You (Deluxe)',
    'release_date': '2019-05-03',
    'release_date_precision': 'day',
    'total_tracks': 14,
    'type': 'album',
    'uri': 'spotify:album:74gSdSHe71q7urGWMMn3qB'}]}

1 Ответ

0 голосов
/ 03 ноября 2019

Код, который вы разместили, не является синтаксически правильным;запуск его через интерпретатор Python приводит к синтаксической ошибке в последней строке. Похоже, вы потеряли фигурную скобку где-то ближе к концу. :)

Я прошел через это и исправил пустое пространство, чтобы сделать структуру легче увидеть;то, как вы его отформатировали, затрудняло увидеть, какие ключи были на каком уровне вложенности, но с последовательным отступом это становится намного понятнее:

lizzo_top_tracks = {
    'tracks': [{
        'album': {
            'album_type': 'album',
            'artists': [{
                'external_urls': {
                    'spotify': 'https://open.spotify.com/artist/56oDRnqbIiwx4mymNEv7dS'
                },
                'href': 'https://api.spotify.com/v1/artists/56oDRnqbIiwx4mymNEv7dS',
                'id': '56oDRnqbIiwx4mymNEv7dS',
                'name': 'Lizzo',
                'type': 'artist',
                'uri': 'spotify:artist:56oDRnqbIiwx4mymNEv7dS'
            }],
            'external_urls': {
                'spotify': 'https://open.spotify.com/album/74gSdSHe71q7urGWMMn3qB'
            },
            'href': 'https://api.spotify.com/v1/albums/74gSdSHe71q7urGWMMn3qB',
            'id': '74gSdSHe71q7urGWMMn3qB',
            'images': [{'height': 640, 'width': 640}],
            'name': 'Cuz I Love You (Deluxe)',
            'release_date': '2019-05-03',
            'release_date_precision': 'day',
            'total_tracks': 14,
            'type': 'album',
            'uri': 'spotify:album:74gSdSHe71q7urGWMMn3qB'
        }
    }]
}

Итак, первое (и единственное) значение, которое вы получите for i in lizzo_top_tracks['tracks'] это будет словарь:

i = {
    'album': {
        'album_type': 'album',
        'artists': [{
            'external_urls': {
                'spotify': 'https://open.spotify.com/artist/56oDRnqbIiwx4mymNEv7dS'
             },
            'href': 'https://api.spotify.com/v1/artists/56oDRnqbIiwx4mymNEv7dS',
            'id': '56oDRnqbIiwx4mymNEv7dS',
            'name': 'Lizzo',
            'type': 'artist',
            'uri': 'spotify:artist:56oDRnqbIiwx4mymNEv7dS'
        }],
        'external_urls': {
            'spotify': 'https://open.spotify.com/album/74gSdSHe71q7urGWMMn3qB'
        },
        'href': 'https://api.spotify.com/v1/albums/74gSdSHe71q7urGWMMn3qB',
        'id': '74gSdSHe71q7urGWMMn3qB',
        'images': [{'height': 640, 'width': 640}],
        'name': 'Cuz I Love You (Deluxe)',
        'release_date': '2019-05-03',
        'release_date_precision': 'day',
        'total_tracks': 14,
        'type': 'album',
        'uri': 'spotify:album:74gSdSHe71q7urGWMMn3qB'
    }
}

Ключ only в этом словаре - 'album', значением которого является другой словарь, содержащий всю другую информацию. Если вы хотите напечатать, скажем, дату выпуска альбома и список имен исполнителей, вы должны сделать:

for track in lizzo_top_tracks['tracks']:
    print('Album Release Date: ' + track['album']['release_date'])
    print('Artists: ' + str([artist['name'] for artist in track['album']['artists']]))

Если это словари, которые вы создаете сами, вы можете захотетьудалите некоторые из вложенных слоев, где есть только один ключ, поскольку они только усложняют навигацию по структуре, не давая вам никакой дополнительной информации. Например:

lizzo_top_albums = [{
    'album_type': 'album',
    'artists': [{
        'external_urls': {
            'spotify': 'https://open.spotify.com/artist/56oDRnqbIiwx4mymNEv7dS'
        },
        'href': 'https://api.spotify.com/v1/artists/56oDRnqbIiwx4mymNEv7dS',
        'id': '56oDRnqbIiwx4mymNEv7dS',
        'name': 'Lizzo',
        'type': 'artist',
        'uri': 'spotify:artist:56oDRnqbIiwx4mymNEv7dS'
    }],
    'external_urls': {
        'spotify': 'https://open.spotify.com/album/74gSdSHe71q7urGWMMn3qB'
    },
    'href': 'https://api.spotify.com/v1/albums/74gSdSHe71q7urGWMMn3qB',
    'id': '74gSdSHe71q7urGWMMn3qB',
    'images': [{'height': 640, 'width': 640}],
    'name': 'Cuz I Love You (Deluxe)',
    'release_date': '2019-05-03',
    'release_date_precision': 'day',
    'total_tracks': 14,
    'type': 'album',
    'uri': 'spotify:album:74gSdSHe71q7urGWMMn3qB'
}]

Эта структура позволяет вам написать запрос так, как вы изначально пытались это сделать:

for album in lizzo_top_albums:
    print('Album Release Date: ' + album['release_date'])
    print('Artists: ' + str([artist['name'] for artist in album['artists']]))

Намного проще, верно? :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...