合并两本词典

Pra*_*a V 1 python

我有两个字典如下:

D1={'a':1,'b':2,'c':3}

D2={'b':2,'c':3,'d':1}

我想合并这两个词典,结果如下:

D3={'a':1,'b':2,'c':3,'b':2,'c':3,'d':1}

我怎么能在python中实现这一点?

Bru*_*uno 8

我想合并这两个字典,结果应该如下:

D3={'a':1,'b':2,'c':3,'b':2,'c':3,'d':1}

我怎样才能在 python 中实现这一点?

你不能。在 Python 字典中,每个键只能有一个值。您可以做的是将列表或集合作为值。

这是一个带有集合的示例:

d1 = { 'a': 1, 'b': 2, 'c': 3 }
d2 = { 'a': 1, 'b': 5, 'd': 4 }
d3 = {}
def add_dict(target, d):
    for key in d:
        target.setdefault(key, set([])).add(d[key])

add_dict(d3, d1)
add_dict(d3, d2)
Run Code Online (Sandbox Code Playgroud)

这会给你d3

{'a': set([1]), 'c': set([3]), 'b': set([2, 5]), 'd': set([4])}
Run Code Online (Sandbox Code Playgroud)

您也可以使用列表(可能更接近您的示例)来执行此操作:

d1 = { 'a':1, 'b':2, 'c': 3}
d2 = { 'b':2 ,'c':3, 'd': 1}
d3 = {}
def add_dict(target, d):
    for key in d:
        target.setdefault(key, []).append(d[key])

add_dict(d3, d1)
add_dict(d3, d2)
Run Code Online (Sandbox Code Playgroud)

你会得到这个:

{'a': [1], 'c': [3, 3], 'b': [2, 2], 'd': [1]}
Run Code Online (Sandbox Code Playgroud)

但是,看着{'a':1,'b':2,'c':3,'b':2,'c':3,'d':1}(不能是字典),您似乎完全追求不同的数据结构。也许是这样的:

d1 = { 'a':1, 'b':2, 'c': 3}
d2 = { 'b':2 ,'c':3, 'd': 1}
result = []

result += [ { 'key': key, 'value': d1[key] } for key in d1 ]
result += [ { 'key': key, 'value': d2[key] } for key in d2 ]
Run Code Online (Sandbox Code Playgroud)

这会产生这个,它看起来更接近你最初想到的数据结构:

[ {'value': 1, 'key': 'a'},
  {'value': 3, 'key': 'c'},
  {'value': 2, 'key': 'b'},
  {'value': 3, 'key': 'c'},
  {'value': 2, 'key': 'b'},
  {'value': 1, 'key': 'd'} ]
Run Code Online (Sandbox Code Playgroud)


Pie*_* GM 5

你可能想尝试:

D3 = {}
D3.update(D1)
D3.update(D2)
Run Code Online (Sandbox Code Playgroud)

在这里,我们D3首先创建一个空字典,然后从另外两个字典中更新它.

请注意,你需要小心更新的顺序:如果D2共享一些键,带D1,上面的代码将覆盖相应的条目D1与那些D2.

还要注意,密钥不会重复.您提供的示例D3={a:1,b:2,c:3,b:2,c:3,d:1}不是有效的字典.