0

在以下可用的示例代码中,我定义了两个字典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'}}

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

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

4

2 回答 2

2

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

    a['device'].update(b['device'])
于 2013-10-18T15:12:20.433 回答
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函数中不是很有意义吗?

于 2013-10-18T15:17:42.333 回答