gpt4 book ai didi

python - 用于关联字典列表和列表列表的 pythonian 单行代码

转载 作者:太空宇宙 更新时间:2023-11-04 07:14:10 25 4
gpt4 key购买 nike

给定一个项目列表 [音乐家] 和一个词典列表 [乐器] 如何以 pythonic 方式在它们之间建立关联?

因此,为了简化我的真实场景,请考虑以下内容:

musicians  = [[700,"James","Hetfield", "jh@metallica.com","N/A"],
[701,"Lars","Ulrich","lu@metallica.com","N/A"],
[702,"Kirk","Hammett","kh@metallica.com","N/A"],
[703,"Robert","Trujillo", "rt@metallica.com","N/A"]]

instruments= ({700:"guitar"},{701:"drums"})

我的目标是用 instruments in instruments 替换 N/A is musicians。

下面的代码可以解决问题(但直觉来自 java/c++)

for m in musicians:
for i in instruments:
if m[0] in i:
m[4]=i[m[0]]

正确的预期结果是:

[[700, 'James', 'Hetfield', 'jh@metallica.com', 'guitar'], [701, 'Lars', 'Ulrich', 'lu@metallica.com', 'drums'], [702, 'Kirk', 'Hammett', 'kh@metallica.com', 'N/A'], [703, 'Robert', 'Trujillo', 'rt@metallica.com', 'N/A']]

问:python有经典的方法吗?

最佳答案

您可以使用 collections.ChainMap组合您的乐器映射,然后使用列表理解:

from collections import ChainMap

cm = ChainMap(*instruments)
musicians = [[*x[:-1], cm.get(x[0], x[-1])] for x in musicians]

print(musicians)

# [[700, 'James', 'Hetfield', 'jh@metallica.com', 'guitar'],
# [701, 'Lars', 'Ulrich', 'lu@metallica.com', 'drums'],
# [702, 'Kirk', 'Hammett', 'kh@metallica.com', 'N/A'],
# [703, 'Robert', 'Trujillo', 'rt@metallica.com', 'N/A']]

关于python - 用于关联字典列表和列表列表的 pythonian 单行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54310937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com