我有一个名为播放列表的字典,以时间戳为键,以歌曲名称和艺术家为值,存储在一个元组中,格式如下:
{datetime.datetime(2019, 11, 4, 20, 2): ('Closer', 'The Chainsmokers'),
datetime.datetime(2019, 11, 4, 19, 59): ('Piano Man', 'Elton John'),
datetime.datetime(2019, 11, 4, 19, 55): ('Roses', 'The Chainsmokers')}
我试图从这个字典/元组中设置艺术家并将其设置为新字典中的键,值是该艺术家的歌曲及其在字典中出现的频率。示例输出为:
{'Chainsmokers': {'Closer': 3, 'Roses': 1},
'Elton John': {'Piano Man': 2}, … }
到目前为止,这是我的代码:
dictionary = {}
for t in playlist.values():
if t[1] in dictionary:
artist_song[t[1]] += 1
else:
artist_songs[t[1]] = 1
print(dictionary)
但是,这只会返回艺术家作为键,艺术家播放的频率作为值。
在此先感谢您的帮助。
最佳答案
使用 defaultdict
它有一个 defaultdict
作为默认值,最后有一个 int
作为嵌套默认值:
from collections import defaultdict
d = defaultdict(lambda: defaultdict(int))
for song, artist in playlist.values():
d[artist][song] += 1
print(d)
# {'The Chainsmokers': {'Closer': 1, 'Roses': 1}), 'Elton John': {'Piano Man': 1})}
非 defaultdict 方法有点冗长,因为我们需要确保字典存在,这是 defaultdict 为我们处理的。
d = {}
for song, artist in playlist.values():
d.setdefault(artist, {})
d[artist].setdefault(song, 0)
d[artist][song] += 1
关于python - 在字典中创建字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59060430/