如果输入是
,我怎样才能将三组不同的字典合并为新字典d1 = {'name':'tom', 'age':'14', 'sex':'m'}
d2 = {'color':'w', 'weight':'58','style':'good'}
d3 = {'sports':'cricket','music':'rock','dance':'disco'}
输出应为d = {'name':'tom', 'age':'14', 'sex':'m','color':'w', 'weight':'58','style':'good','sports':'cricket','music':'rock','dance':'disco'}
我尝试使用更新方法,它只适用于两个字典,如果我使用3设置它会导致重复,那么如何将三个字典合并为单个字典
答案 0 :(得分:6)
如果您使用的是最新版本的Python(> = 3.5),则可以利用unpacking in mapping literals
d1 = {'name':'tom', 'age':'14', 'sex':'m'}
d2 = {'color':'w', 'weight':'58','style':'good'}
d3 = {'sports':'cricket','music':'rock','dance':'disco'}
new_dict = {**d1, **d2, **d3}
答案 1 :(得分:3)
update()
将有效:
d1 = {'name':'tom', 'age':'14', 'sex':'m'}
d2 = {'color':'w', 'weight':'58','style':'good'}
d3 = {'sports':'cricket','music':'rock','dance':'disco'}
d1.update(d2)
d1.update(d3)
print(d1)
答案 2 :(得分:1)
Pythonic方式:
{**d1, **d2, **d3}
注意字典中的重复键。
答案 3 :(得分:0)
使用两条线是否有问题?如果没有,我会建议:
{{1}}
答案 4 :(得分:0)
另一个选择是使用collections.ChainMap
:
>>> from collections import ChainMap
>>> d1 = {'name':'tom', 'age':'14', 'sex':'m'}
>>> d2 = {'color':'w', 'weight':'58','style':'good'}
>>> d3 = {'sports':'cricket','music':'rock','dance':'disco'}
>>> result = ChainMap(d1, d2, d3)
>>> result
ChainMap({'age': '14', 'name': 'tom', 'sex': 'm'}, {'color': 'w', 'style': 'good', 'weight': '58'}, {'music': 'rock', 'dance': 'disco', 'sports': 'cricket'})
ChainMap
的行为主要是,就像你想要的合并dict
一样。您始终可以通过以下方式将其转换为普通dict
>>> dict(result)
{'name': 'tom', 'dance': 'disco', 'color': 'w', 'weight': '58', 'style': 'good', 'age': '14', 'music': 'rock', 'sex': 'm', 'sports': 'cricket'}
您还可以编写一个简单的包装函数,以简化用法:
from collections import ChainMap
def merge_dicts(*dicts):
return dict(ChainMap(*dicts))
注意:它是在python 3.3中引入的