查找并根据引用字典值向字典追加新值



我想从引用字典中查找值("uri") " fulltrack"并创建一个具有更新值的新字典。每个列表将被用来创建播放列表与spotify API之后。

考虑这个字典列表,每个列表项显示一个轨道:

fulltracks = [{"artists":[1,2], "uri": "xyz",} 
{"artists":[3], "uri": "abc"},
{"artists":[4], "uri": "nmk"}, 
{"artists":[5], "uri": "qwe"}, 

另外,我有这个字典,其中的值是来自fulltracks的键(艺术家):

genres = {
"rock": [1],
"pop": [2],
"hip hop": [3,4],
"rap": [4],
"house": [5]}

我想出版一本更新版的词典&;genres_uris&;;

genres_uris = {
"rock": ["xyz"],
"pop": ["xyz"],
"hip hop": ["abc", "nmk"],
"rap": ["abc"],
"house": ["qwe"]}

我会把它称为Excel中的查找,但我无法为Python方法/搜索找到正确的关键字。我为了这个遇到了熊猫,这个图书馆是我问题的正确解决方案吗?

您可以使用字典推导式:

>>> {k: [d["uri"] for d in fulltracks for val in v if val in d["artists"]] for k, v in genres.items()}
{'rock': ['xyz'],
'pop': ['xyz'],
'hip hop': ['abc', 'nmk'],
'rap': ['nmk'],
'house': ['qwe']}

对于这类工作,我建议您查看pandas,这是一个数据分析Python库,您也可以将其视为类固醇和Python中的Excel。https://pandas.pydata.org/

但是没有它也是可以的。一种可能的方法是将fulltracks列表转换为artist_id -> uri映射:

artist_to_uri = {artist: fulltrack["uri"] for fulltrack in fulltracks for artist in fulltrack["artists"]}
# {1: 'xyz', 2: 'xyz', 3: 'abc', 4: 'nmk', 5: 'qwe'}

那么生成genres_uris映射就很简单了:

{
genre: [artist_to_uri[artist] for artist in artists]
for genre, artists in genres.items()
}
# {'rock': ['xyz'],
# 'pop': ['xyz'],
# 'hip hop': ['abc', 'nmk'],
# 'rap': ['nmk'],
# 'house': ['qwe']}

我试着把它应用到" real ";fulltracks。我不能使这个结构工作。

fulltracks看起来像这样:

[Fulltracks = FullTrack with fields:
album = SimpleAlbum(album_group, album_type, artists, ...)
artists = [2 x SimpleArtist(external_urls, href, id, name, type, uri)
uri = 8192118xq9101aß1],
[Fulltracks = FullTrack with fields:
album = SimpleAlbum(album_group, album_type, artists, ...)
artists = [3 x SimpleArtist(external_urls, href, id, name, type, uri)
uri = 121212a0xaß1ß1010]

例如,我可以使用

访问第一个列表项的第一个艺术家:
fulltracks[0].artist[0].id

你知道如何调整你推荐的代码片段吗?

相关内容

  • 没有找到相关文章

最新更新