2016-11-13 37 views
-1

我正在写一个函数,我试图将两个字典(称为数据库)合并在一起,而不重复任何键或修改原件。我认为我很接近,但我目前正在收到错误'db1'没有定义,即使它是函数的参数之一。下面是两个库的例子,我需要他们看起来像合并没有重复密钥合并字典python

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) 
+1

不要使用图片。粘贴文本以便回复者在尝试帮助时不必重新输入。 –

+0

确定它只是更清晰的图片,但我现在将它输出 – n00bprogrammer22

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

谢谢你这个作品真的很好 – n00bprogrammer22

+0

@ n00bprogrammer22有点简单的解决方案 –