我有两个字典如下:
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中实现这一点?
我有两个字典如下:
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中实现这一点?
我想合并这两个字典,结果应该如下:
D3={'a':1,'b':2,'c':3,'b':2,'c':3,'d':1}
我怎样才能在python中实现这一点?
你不能。Python dict 中的每个键只能有一个值。您可以做的是将列表或集合作为值。
这是一个带有集合的示例:
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)
这会给你d3
:
{'a': set([1]), 'c': set([3]), 'b': set([2, 5]), 'd': set([4])}
您也可以使用列表执行此操作(可能更接近您的示例):
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)
你会得到这个:
{'a': [1], 'c': [3, 3], 'b': [2, 2], 'd': [1]}
但是,看着{'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 ]
这将产生这个,它看起来更接近您最初想到的数据结构:
[ {'value': 1, 'key': 'a'},
{'value': 3, 'key': 'c'},
{'value': 2, 'key': 'b'},
{'value': 3, 'key': 'c'},
{'value': 2, 'key': 'b'},
{'value': 1, 'key': 'd'} ]
您可能想尝试:
D3 = {}
D3.update(D1)
D3.update(D2)
在这里,我们D3
首先创建一个空字典,然后从其他两个字典更新它。
请注意,您需要注意更新的顺序:如果D2
与 共享某些键D1
,则上面的代码将覆盖 与 的相应D1
条目D2
。
还要注意,这些键不会重复。您提供的示例D3={a:1,b:2,c:3,b:2,c:3,d:1}
不是有效的字典。
根据定义,字典不能有重复的键,因此“合并”字典实际上会给出以下结果(注意顺序是任意的):
{'a': 1, 'b': 2, 'c': 3, 'd': 1}
您可以创建其中一个字典的克隆并将另一个条目合并到其中:
D3 = dict(D1)
D3.update(D2)
或者您可以从每个输入字典的 (key, value) 元组的串联中创建一个新字典:
D3 = dict(D1.items() + D2.items())
如果您真的想要重复键的多个值,则需要每个键的值列表:
from itertools import groupby
dict(( (key, [v for k, v in group]) for key, group in groupby(sorted(D1.items() + D2.items()), lambda x: x[0])))
In [3]: D1={'a':1,'b':2,'c':3}
In [4]: D2={'b':2,'c':3,'d':1}
In [5]: D1.update(D2)
In [6]: D1
Out[6]: {'a': 1, 'b': 2, 'c': 3, 'd': 1}
更新
替代解决方案
In [9]: D3=D1.copy()
In [10]: D3.update(D2)
In [11]: D3
Out[11]: {'a': 1, 'b': 2, 'c': 3, 'd': 1}
In [12]: D4=dict(D1, **D2)
或者
In [13]: D4
Out[13]: {'a': 1, 'b': 2, 'c': 3, 'd': 1}
或者
In [16]: D5 = dict(D1.items() + D2.items())
In [17]: D5
Out[17]: {'a': 1, 'b': 2, 'c': 3, 'd': 1}
你在问什么是不可能的,因为在 Python 字典中不能有两个具有相同值的不同键。
与您的问题最接近的答案是:
D3 = dict( D1.items() + D2.items() )
注意:如果同一键有不同的值,则 D2 中的值将是 D3 中的值。
示例:
D1 = { 'a':1, 'b'=2 }
D2 = { 'c':3, 'b':3}
那么,D3 将是:
D3= { 'a':1, 'b':3, 'c':3 }