繁体   English   中英

使用 enumerate 获取列表列表 (json)

[英]Using enumerate for a list of lists (json)

我正在查看带有 python 的 Spotify 音乐。 到现在还没有在网上找到答案。 我想从从 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

由于艺术家变量是列表和字典的列表,所以当我打印艺术家的长度时,我得到 20:

len(artist)
20

但是,在艺术家变量的每个元素中,有 100 个项目:

len(artist[0])
100

我想遍历Artist中的所有 2000 个项目,并将它们添加到一个列表中。 到目前为止,我的代码非常笨拙:

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

缩短这个的最佳方法是什么? 我试过使用enumerate ,但不知道该怎么做。 任何帮助将非常感激!

您可以使用双 for 循环来实现此目的:

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

但是,使用 python 列表理解更加pythonic(和高效):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM