合并字典python而不重复键

时间:2016-11-13 21:19:17

标签: python python-3.x dictionary merge

我正在编写一个函数,我试图将两个字典(称为数据库)合并在一起,而不重复任何键或修改原件。我想我很接近,但我现在得到的错误'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')]}

正如您所看到的,“Leonardo da Vinci”键出现在两个词典中,但只应出现在合并词典中一次。感谢任何能提供帮助的人。这是我目前的代码:

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

1 个答案:

答案 0 :(得分:1)

我认为这就是你所需要的:

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