Использование перечисления для списка списков (json) - PullRequest
0 голосов
/ 26 апреля 2020

Я смотрю на Spotify musi c с python. Не удалось найти ответ в Интернете до сих пор. Я хотел бы получить информацию о каждой песне, полученной из API (2000 песен). У меня есть исполнитель каждой песни, представляющий собой длинную строку json, показанную ниже:

print(artist):

#This is the output:

[[{'track': {'album': {'artists': [{'external_urls': {'spotify': 'https://open.spotify.com/artist/1uiEZYehlNivdK3iQyAbye'},
       'href': 'https://api.spotify.com/v1/artists/1uiEZYehlNivdK3iQyAbye',
       'id': '1uiEZYehlNivdK3iQyAbye',
       'name': 'Tom Misch',
       'type': 'artist',
       'uri': 'spotify:artist:1uiEZYehlNivdK3iQyAbye'},
      {'external_urls': {'spotify': 'https://open.spotify.com/artist/2rspptKP0lPBdlJJAJHqht'},
       'href': 'https://api.spotify.com/v1/artists/2rspptKP0lPBdlJJAJHqht',
       'id': '2rspptKP0lPBdlJJAJHqht',
       'name': 'Yussef Dayes',
       'type': 'artist',
       'uri': 'spotify:artist:2rspptKP0lPBdlJJAJHqht'}]}}}, 

# and so on

Поскольку переменная artist представляет собой список списков и словарей, когда Я печатаю длину artist Я получаю 20:

len(artist)
20

Однако в каждом элементе переменной artist имеется 100 элементов:

len(artist[0])
100

Я хочу провести l oop через все 2000 элементов в artist и добавить их в один список. Пока мой код был очень неуклюжим:

artist_list = []
i=0
while i<100:

        artist_list.append(artist[0][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[1][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[2][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[3][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[4][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[5][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[6][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[7][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[8][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[9][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[10][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[11][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[12][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[13][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[14][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[15][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[16][i]["track"]["album"]["artists"][0]["name"])
        artist_list.append(artist[17][i]["track"]["album"]["artists"][0]["name"])

        i+=1

Какой лучший способ сократить это? Я пытался использовать перечисление , но не мог понять, как это сделать. Любая помощь будет высоко ценится!

1 Ответ

1 голос
/ 26 апреля 2020

Вы можете добиться этого, используя удвоение для l oop:

artist_list = []
for a in artist:
    for b in a:
        artist_list.append(b["track"]["album"]["artists"][0]["name"])

Однако, лучше использовать pythoni c (и эффективнее) для понимания списка python:

artist_list = [b["track"]["album"]["artists"][0]["name"] for a in artist for b in a]
...