pythonian oneliner将dict列表和lis列表联系起来

2024-06-08 07:29:41 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个项目列表[音乐家]和一个字典列表[工具],人们如何以一种Python式的方式将它们联系起来?

因此,要简化我的真实场景,请考虑以下几点:

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"})

我的目标是用乐器中的乐器来代替不适用的音乐家。你知道吗

下面的代码可以做到这一点(但直觉来自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中有一种经典的方法吗?你知道吗


Tags: incom列表lularsjameskhkirk
2条回答

如果dict列表中没有重复的键,则合并这些键

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"]]

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

instruments_dict = {}
for d in instrumets:
    instruments_dict.update(d)
for m in musicians:
    m[-1] = instruments_dict.get(m[0], m[-1]) # thanks to  Ev. Kounis 

可以使用^{}组合工具映射,然后使用列表:

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']]

相关问题 更多 >

    热门问题