我有两本字典如下:
和
我想合并这两个字典,结果应该如下:
我如何在python中实现这一点?
你可以试试:
1 2 3 | D3 = {} D3.update(D1) D3.update(D2) |
在这里,我们首先创建一个空字典
注意,您需要注意更新的顺序:如果
还要注意,键不会重复。您给出的示例
I want to merge these two dictionaries and the result should be as
follows:D3={'a':1,'b':2,'c':3,'b':2,'c':3,'d':1}
how can I achieve this in python?
你不能。在Python dict中,每个键只能有一个值。
这里有一个例子与一套:
1 2 3 4 5 6 7 8 9 | 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) |
这将给你
1 | {'a': set([1]), 'c': set([3]), 'b': set([2, 5]), 'd': set([4])} |
你也可以用一个列表(可能更接近你的例子):
1 2 3 4 5 6 7 8 9 | 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) |
你会得到:
1 | {'a': [1], 'c': [3, 3], 'b': [2, 2], 'd': [1]} |
但是,看看
1 2 3 4 5 6 | 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 ] |
这将产生这样的结果,它看起来更接近您最初设想的数据结构:
1 2 3 4 5 6 | [ {'value': 1, 'key': 'a'}, {'value': 3, 'key': 'c'}, {'value': 2, 'key': 'b'}, {'value': 3, 'key': 'c'}, {'value': 2, 'key': 'b'}, {'value': 1, 'key': 'd'} ] |
字典的定义不能有重复的键,所以"合并"字典实际上会给出以下结果(注意顺序是任意的):
1 | {'a': 1, 'b': 2, 'c': 3, 'd': 1} |
你可以创建一个克隆的其中一个字典,并将条目从另一个合并到它:
1 2 | D3 = dict(D1) D3.update(D2) |
或者您可以从每个输入字典的(key, value)元组的连接中创建一个新的字典:
1 | D3 = dict(D1.items() + D2.items()) |
如果你真的想要多个值的重复键,你需要像一个列表的值为每个键:
1 2 | 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]))) |
1 2 3 4 5 6 7 8 | 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} |
更新
替代方案
1 2 3 4 5 6 7 8 | 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) |
或
1 2 | In [13]: D4 Out[13]: {'a': 1, 'b': 2, 'c': 3, 'd': 1} |
或
1 2 3 4 | In [16]: D5 = dict(D1.items() + D2.items()) In [17]: D5 Out[17]: {'a': 1, 'b': 2, 'c': 3, 'd': 1} |
您所要求的是不可能的,因为在Python字典中不能有两个具有相同值的不同键。
最接近你问题的答案是:
注意:如果你对同一个键有不同的值,那么D2中的值就是D3中的值。
例子: