Вставить в список только некоторые ключи вложенного словаря Python

Я использую Spotipy для получения всех альбомов от исполнителя.

У меня есть следующий объект словаря Python для каждого запроса (по одному на каждого исполнителя):

{
    "href": "https://api.spotify.com/v1/artists/006ibfxHXj6ewIkihKcaS2/albums?offset=0&limit=1&include_groups=album",
    "items": [
        {
            "album_group": "album",
            "album_type": "album",
            "artists": [
                {
                    "external_urls": {
                        "spotify": "https://open.spotify.com/artist/006ibfxHXj6ewIkihKcaS2"
                    },
                    "href": "https://api.spotify.com/v1/artists/006ibfxHXj6ewIkihKcaS2",
                    "id": "006ibfxHXj6ewIkihKcaS2",
                    "name": "Hello Meteor",
                    "type": "artist",
                    "uri": "spotify:artist:006ibfxHXj6ewIkihKcaS2"
                }
            ],
            "available_markets": [
           "blabla"
            ],
            "external_urls": {
                "spotify": "https://open.spotify.com/album/19HZblBbWVWYVqiM0B9eW8"
            },
            "href": "https://api.spotify.com/v1/albums/19HZblBbWVWYVqiM0B9eW8",
            "id": "19HZblBbWVWYVqiM0B9eW8",
            "images": [
                {
                    "height": 640,
                    "url": "https://i.scdn.co/image/8c249db0add94460c7e61e994e7ac3f8f1abddd9",
                    "width": 640
                },
                {
                    "height": 300,
                    "url": "https://i.scdn.co/image/03ff6bd7c00fd58b167a4f3bc5529e5d17bf7ee1",
                    "width": 300
                },
                {
                    "height": 64,
                    "url": "https://i.scdn.co/image/151539b29846c6ae9b68c628e639d66277349468",
                    "width": 64
                }
            ],
            "name": "Mu & Mea",
            "release_date": "2018-07-17",
            "release_date_precision": "day",
            "total_tracks": 15,
            "type": "album",
            "uri": "spotify:album:19HZblBbWVWYVqiM0B9eW8"
        }
    ],
    "limit": 1,
    "next": "https://api.spotify.com/v1/artists/006ibfxHXj6ewIkihKcaS2/albums?offset=1&limit=1&include_groups=album",
    "offset": 0,
    "previous": null,
    "total": 6
}

У меня есть следующая строка кода, которая добавляет все объекты в список:

albums.extend(sp.artist_albums(artist, album_type='album', limit=1)['items'] for artist in artists)

Проблема в том, что мне нужны только два бесконечных ключа, которые он возвращает; Мне нужно только название альбома и дата выхода. Результат, который я хотел бы получить, это список:

[['album name 1', 'release_date1'], ['album name2'', release_date2'], ...]

person Gerico0889    schedule 28.09.2018    source источник
comment
Итак, какой результат вы хотите тогда? Добавить словари с помощью {'name': ..., 'release_date': ...}?   -  person Martijn Pieters    schedule 28.09.2018
comment
А ['items']['name'] нет, клавиша 'items' есть в списке. У вас есть ['items'][0]['name'].   -  person Martijn Pieters    schedule 28.09.2018
comment
Мне нужен список, содержащий только 'name' и 'release_date' без ключей, только значения.   -  person Gerico0889    schedule 28.09.2018
comment
Итак, вы получили вложенные списки? [['album 1 title', '2018-07-17'], ['album 2 title', '2018-07-01'], ...]? Не могли бы вы обновить свой вопрос, чтобы показать ожидаемый результат?   -  person Martijn Pieters    schedule 28.09.2018


Ответы (1)


Вместо добавления списка ['items'] (который содержит только один альбом, если я правильно понимаю ваш запрос limit=1), добавьте новый словарь с конкретными значениями.

Чтобы избежать необходимости дважды вызывать API Spotify для этих двух элементов, поместите цикл запросов в выражение генератора; это упрощает затем получение полученного словаря альбома и удаление определенных ключей:

results = (result for artist in artists 
           for result in sp.artist_albums(artist, album_type='album', limit=1)['items'])
albums.extend([r['name'], r['release_date']] for r in results)

Здесь results — это лениво вычисляемая последовательность из {'album_group': ..., 'album_type', ..., ...} словарей; это все альбомы в списке 'items' для каждого запрошенного исполнителя. Здесь есть только 1 для каждого исполнителя, но на случай, если альбомов может быть ноль, или вы хотели увеличить значение limit, я обязательно перебираю элементы.

Выражение генератора в albums.extend() затем создает новый объект списка с двумя ключами для каждого из этих результатов.

person Martijn Pieters    schedule 28.09.2018