song_lyrics_per_year={year:[(song, singer, lyrics),(song2, singer2, lyrics2)...], year2: ....}
你好,我有一个字典,以年份为关键字,元组(由歌曲,歌手,歌词组成)的值列表。否,我需要分别访问所有3个元素,并将它们解析为一个列表
onlysongs=[]
onlyartists=[]
然而,到目前为止,我所有的尝试都失败了,包括这里建议的列表理解和代码。
这不应该起作用吗?
for item in song_lyrics_per_year.values():
onlyartists.append(item[1])
作为响应,我得到一个"IndexError: list index out of range“
不幸的是,仅仅几周的时间,我就浏览了所有关于这个话题的旧答案,并尝试了solutions...they不起作用。
谢谢你的帮忙!
发布于 2018-06-03 00:01:13
我认为你遗漏了1级列表。尝试如下所示:
for songs_in_single_year in song_lyrics_per_year.values():
for song in songs_in_single_year:
onlyartists.append(song[1])
发布于 2018-06-03 00:03:04
for value in song_lyrics_per_year.values():
for i in range(0,len(value)-1):
onlysongs.append(value[i][0])
onlyartists.append(value[i][1])
感谢编辑@Austin。
发布于 2018-06-03 00:07:36
我想这样会更清楚:
for year in song_lyrics_per_year:
for song_lyric in song_lyrics_per_year[year]:
song, singer, lyrics = song_lyric
if singer not in onlyartists:
onlyartists.append(singer)
编辑:要跟踪艺术家出现的频率,可以使用collections.Counter()。下面是一个完整的示例:
from collections import Counter
singers = Counter()
years = {
2018: [
('Title1', 'Singer1', 'Lyrics1'),
('Title2', 'Singer1', 'Lyrics2')
],
2019: [
('Title3', 'Singer3', 'Lyrics3')
]
}
for year in years:
for song in years[year]:
title, singer, lyrics = song
singers.update((singer,))
for singer, hits in singers.most_common():
print(singer, hits)
下面是输出:
Singer1 2
Singer3 1
https://stackoverflow.com/questions/50658641
复制相似问题