python - 无需重复代码即可添加到众多列表 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']
这对我来说似乎有很多代码重复,但我不确定如何以更少的重复实现相同的功能。请注意,上面的代码甚至没有将任何内容附加到列表中。由于当前的解决方案非常难看,我怎样才能以更少的代码重复来实现我的目标。
提前致谢
解决方案
您可以只拥有一本字典,而不是拥有多个列表。
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])
推荐阅读
- javascript - 如果可以使用 Flask 提交表单表单 Ajax?
- javascript - undefined 不是一个对象(评估'value.getvalue')“替换
通过动画 " - firebase - Google 服务帐户使用量突然下降
- reactjs - Windows中等效的.bashrc变量
- mysql - MySQL - 如果同一天没有其他条目,则选择
- rust - Rust 在 env::Args 上使用迭代器方法会出错,也许是一个错误?
- oracle - ords 18.2 ORA-00942: 访问 RESTful 服务的表或视图不存在
- c - 可能的内存分配问题?
- python - Python:“列表”对象不可调用
- javascript - 用JS以简单的方式将文本转换为对象