根据参考字典值查找新值并将新值附加到字典
Lookup and append new values to dictionary based on reference dictionary values
我想从参考字典“fulltracks”中查找值(“uri”)并创建一个具有更新值的新字典。之后每个列表都将用于创建带有 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 approach/search 的正确关键字。为此,我遇到了 pandas,这个库是解决我的问题的正确方法吗?
你可以使用字典理解:
>>> {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 库,您也可以将其视为 Excel on steroids 和在 Python。 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']}
我尝试将它应用到“真正的”全轨。我无法使结构正常工作。
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
您知道如何调整推荐的代码段吗?
我想从参考字典“fulltracks”中查找值(“uri”)并创建一个具有更新值的新字典。之后每个列表都将用于创建带有 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 approach/search 的正确关键字。为此,我遇到了 pandas,这个库是解决我的问题的正确方法吗?
你可以使用字典理解:
>>> {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 库,您也可以将其视为 Excel on steroids 和在 Python。 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']}
我尝试将它应用到“真正的”全轨。我无法使结构正常工作。
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
您知道如何调整推荐的代码段吗?