Как мне получить доступ к элементу в кортеже, который хранится в dict? - PullRequest
0 голосов
/ 02 июня 2018
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 голосов
/ 02 июня 2018
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])   

Спасибо за правку @ Остин.

0 голосов
/ 02 июня 2018

Полагаю, так будет проще:

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)

Отредактировано: чтобы отслеживать частоту появления исполнителя, вы можете использовать collection.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
0 голосов
/ 02 июня 2018

Я думаю, что вам не хватает 1 уровня списка.Попробуйте что-то вроде:

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