首页 > 解决方案 > 无需重复代码即可添加到众多列表 Python

问题描述

我从 spotify api 中检索数据,并尝试将检索到的曲目的音频功能放入单独的列表中。我目前使用以下代码发出请求并检索音频功能:

query_get_tracks = f"https://api.spotify.com/v1/audio-features/?ids={','.join(ids)}"
tracks_response = requests.get(query_get_tracks, headers={
    "Authorization": f"Bearer {auth_token}"
}).json()['audio_features']
danceability_list, energy_list, key_list, loudness_list, mode_list, speechiness_list, 
acousticness_list, instrumentalness_list, liveness_list, valence_list, tempo_list, 
duration_ms_list = ([] for i in range(13))
for i in range(len(tracks_response)):
    base_items = tracks_response[i]
    danceability = base_items['danceability']
    energy = base_items['energy']
    key = base_items['key']
    loudness = base_items['loudness']
    mode = base_items['mode']
    speechiness = base_items['speechiness']
    acousticness = base_items['acousticness']
    instrumentalness = base_items['instrumentalness']
    liveness = base_items['liveness']
    valence = base_items['valence']
    tempo = base_items['tempo']
    duration_ms = base_items['duration_ms'] 

这对我来说似乎有很多代码重复,但我不确定如何以更少的重复实现相同的功能。请注意,上面的代码甚至没有将任何内容附加到列表中。由于当前的解决方案非常难看,我怎样才能以更少的代码重复来实现我的目标。

提前致谢

标签: python

解决方案


您可以只拥有一本字典,而不是拥有多个列表。

from collections import defaultdict

attribute_lists = defaultdict(list)
for item in track_response:
    for attr in ('energy', 'loudness', 'tempo'):
        attribute_lists[attr].append(item[attr])

推荐阅读