无重复键合并词典

2024-06-17 10:17:32 发布

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

我正在编写一个函数,在其中我尝试合并两个字典(称为数据库),而不重复任何键或修改原始的。我想我很接近,但我目前得到的错误'db1'没有定义,即使它是函数的参数之一。这是一个例子,两个字典和我需要他们看起来像合并

d1级

{'Leonardo da Vinci':  [('Mona Lisa', 1503, 76.8, 53.0, 'oil paint', 'France'),
                        ('The Last Supper', 1495, 460.0, 880.0, 'tempera',  'Italy')]}

d2级

{'Pablo Picasso'     : [('Guernica', 1937, 349.0, 776.0, 'oil paint', 'Spain')],
 'Leonardo da Vinci' : [("Portrait  of Isabella d'Este", 1499, 63.0, 46.0, 'chalk', 'France'),
                        ('The Last Supper', 1495, 460.0, 880.0, 'tempera', 'Italy')]}

合并

{'Pablo Picasso'    : [('Guernica', 1937, 349.0, 776.0, 'oil paint', 'Spain')],
 'Leonardo da Vinci': [('Mona Lisa', 1503, 76.8, 53.0, 'oil paint', 'France'),
                       ("Portrait of Isabella d'Este", 1499, 63.0, 46.0, 'chalk', 'France'),
                       ('The Last Supper', 1495, 460.0, 880.0, 'tempera', 'Italy')]}

正如你所见,关键“达芬奇”出现在两个字典,但应该只出现在合并字典一次。感谢任何能帮忙的人。这是我目前的代码:

def merge_databases (db1,db2):
    ds = [db1, db2]
    d = {}
    for k in db1.iterkeys():
        d[k] = tuple(d[k] for d in ds)

Tags: the函数字典daleonardolastoilpaint
1条回答
网友
1楼 · 发布于 2024-06-17 10:17:32

我想这就是你需要的:

def merge_databases(db1, db2):
    d = {}
    for key in db1.keys() | db2.keys():
        d[key] = db1.get(key, []) + db2.get(key, [])    
    return d

甚至:

def merge_databases(db1, db2):
    return {key: db1.get(key, []) + db2.get(key, []) 
            for key in db1.keys() | db2.keys()}

相关问题 更多 >