如何在不覆盖的情况下将具有相同键的2个词典合并为1个

2024-10-03 00:21:03 发布

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

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

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']}

谢谢你的帮助


Tags: 字典eststusacaflaurentruerachel
2条回答

如果我正确理解了您的示例,您希望在合并结果中为两个字典的值分配新键。您可以使用enumerate对两个字典中的值进行串联:

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

相关问题 更多 >