如何将一组不同的词典添加到一个

时间:2018-01-26 16:33:11

标签: python python-3.x

如果输入是

,我怎样才能将三组不同的字典合并为新字典
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设置它会导致重复,那么如何将三个字典合并为单个字典

5 个答案:

答案 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中引入的