如何将两个python词典与同一级别的元素合并?

时间:2013-10-18 15:05:58

标签: python dictionary

在以下可用的示例代码中,我定义了两个我想要组合的词典ab

a = {'device': {'version': '1.2.3'}}
b = {'device': {'name': 'testdevice'}}
c = {'other':  {'cost': '1000'}}

q = {}
q.update(a)
q.update(b)
q.update(c)
print q

p = {}
p = dict(p.items() + a.items())
p = dict(p.items() + b.items())
p = dict(p.items() + c.items())
print p

即。结果字典应该等于

result = {'device': {'name': 'testdevice', 'version': '1.2.3'}, 'other': {'cost':'1000'}}

但代码中的两个示例总是给出:

{'device': {'name': 'testdevice'}, 'other': {'cost':'1000'}}

有没有一种简单的方法(没有类/函数)来实现这个目标?

我想要结合同一级别的字典条目。可以假设只有两个级别。示例代码本身可以简化,但稍后将在循环中使用,其中许多字典可能被“添加/合并”在一起。

2 个答案:

答案 0 :(得分:2)

有一种update方法,我想这就是你要找的方法:

    a['device'].update(b['device'])

答案 1 :(得分:2)

也许:

>>> a = {'device': {'version': '1.2.3'}}
>>> b = {'device': {'name': 'testdevice'}}
>>> c = {'other':  {'cost': '1000'}}
>>> to_merge = [a,b,c]
>>> d = {}
>>> for m in to_merge:
...     for k,v in m.items():
...         d.setdefault(k, {}).update(v)
...         
>>> d
{'device': {'version': '1.2.3', 'name': 'testdevice'}, 'other': {'cost': '1000'}}

虽然我不知道你为什么反对使用功能。将它包装在merge_list_of_dictionaries函数中是否有意义?