如何访问存储在dict中的元组中的元素?

时间:2018-06-02 15:54:55

标签: python dictionary tuples access

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:列表索引超出范围"

只有几个星期进入Python,我在这个主题上经历了所有旧答案并尝试了解决方案......不幸的是,它们没有用。

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

我认为你缺少1级列表。尝试类似:

for songs_in_single_year in song_lyrics_per_year.values():
    for song in songs_in_single_year:
        onlyartists.append(song[1])

答案 1 :(得分:0)

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。

答案 2 :(得分:0)

我想这样会更清楚:

import re, binascii
with open('hex.txt', 'r') as f:
    file = f.read()
    hexList = re.findall(r"'([\\x\w+]*)'", file)

    for item in hexList:
        file = re.sub(r"('{}')".format(item), str(binascii.unhexlify(item.replace('\\x', ''))), file)
        #file = re.sub("('"+item+"')".format(item), str(binascii.unhexlify(item.replace('\\x', ''))), file)
    print(file)```

编辑:要跟踪艺术家出现的频率,您可以使用collections.Counter()。这是一个完整的例子:

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)

这是输出:

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)