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