如何在不覆盖的情况下将两个具有相同关键字的词典合并为一个



我有两个字典需要合并,同时扩展键#以避免覆盖。我找不到合适的解决办法。我该怎么做?

dic1 = {0: ['Café Replika', '252 Rue Rachel E, USA'], 1: ['Café Tuyo', '370 Rue Marie-Anne Est, USA'] }
dic2 = {0: ['Café Bistro', '4190 St Laurent , USA'], 1: ['Café Portugais', '4051 St Dominique St, USA']}

我需要的输出是:

finaldic = {0: ['Café Replika', '252 Rue Rachel E, USA'], 1: ['Café Tuyo', '370 Rue Marie-Anne Est, USA'], 2: ['Café Bistro', '4190 St Laurent , USA'], 3: ['Café Portugais', '4051 St Dominique St, USA']}

感谢的帮助

如果我正确理解您的示例,您希望在合并结果中为两个字典的值分配新键。您可以使用枚举两个字典中的值:

dic1 = {0: ['Café Replika', '252 Rue Rachel E, USA'], 1: ['Café Tuyo', '370 Rue Marie-Anne Est, USA'] }
dic2 = {0: ['Café Bistro', '4190 St Laurent , USA'], 1: ['Café Portugais', '4051 St Dominique St, USA']}
merged = dict(enumerate((*dic1.values(),*dic2.values())))

结果:

{
0: ['Café Replika', '252 Rue Rachel E, USA'],
1: ['Café Tuyo', '370 Rue Marie-Anne Est, USA'],
2: ['Café Bistro', '4190 St Laurent , USA'],
3: ['Café Portugais', '4051 St Dominique St, USA']
}

您所描述的内容不会有一个内置的解决方案,因为它没有太多逻辑。您似乎完全忽略了键,并将特殊字典视为列表。

您要求的函数需要:

def foo_dicts(x, y):
???
d1 = {0: ['a1', 'a2'], 1: ['b1', 'b2']}
d2 = {0: ['c1', 'c2'], 1: ['d1', 'd2']}
foo_dicts(d1, d2) == {0: ['a1', 'a2'], 1: ['b1', 'b2'], 2: ['c1', 'c2'], 3: ['c1', 'c2']}

如果你真的有列表列表,这将只是+:

def foo_lists(x, y):
return x + y
d1 = [['a1', 'a2'], ['b1', 'b2']]
d2 = [['c1', 'c2'], ['d1', 'd2']]
foo_lists(d1, d2) == [['a1', 'a2'], ['b1', 'b2'], ['c1', 'c2'], ['c1', 'c2']]

如果你坚持保留索引字典,最简单的方法是在连接它们之后将它们枚举回dict:

def foo_dicts(x, y):
return dict(enumerate(v for d in (x, y) for k, v in sorted(d.items()))

最新更新