如何合并具有相同键的字典

5

我有这样的数据结构:

    [ {'SNAPSHOT': {'SnapshotVersion': '304'}},

      {'SNAPSHOT': {'SnapshotCreationDate': '2015-06-21 17:33:41'}},


      {'CafeData': {'CafeVersion': '2807'}}, 

      {'CafeData': {'IsSoftwareOnly': '1'}}, 

      {'CafeData'{'IsPassportTCPIP': '1'}} 

输出应该像这样:
 [ {'SNAPSHOT': {'SnapshotVersion': '304','SnapshotCreationDate': '2015-06-21 17:33:41'}},

   {'CafeData': {'CafeVersion': '2807','IsSoftwareOnly': '1','IsPassportTCPIP': '1'}} 
 
]
2个回答

8

使用 https://docs.python.org/3/library/collections.html#collections.defaultdict,它会在第一次遇到新键时创建一个默认字典。

import collections as co

dd = co.defaultdict(dict)

l = [ {'SNAPSHOT': {'SnapshotVersion': '304'}},
      {'SNAPSHOT': {'SnapshotCreationDate': '2015-06-21 17:33:41'}},
      {'CafeData': {'CafeVersion': '2807'}}, 
      {'CafeData': {'IsSoftwareOnly': '1'}}, 
      {'CafeData': {'IsPassportTCPIP': '1'}} ]

for i in l: 
    for k,v in i.items(): 
        dd[k].update(v) 

结果:

In [8]: dd
Out[8]: 
defaultdict(dict,
            {'SNAPSHOT': {'SnapshotVersion': '304',
              'SnapshotCreationDate': '2015-06-21 17:33:41'},
             'CafeData': {'CafeVersion': '2807',
              'IsSoftwareOnly': '1',
              'IsPassportTCPIP': '1'}})

啊,我明白这不完全是你想要的结果,但我认为这是一个很好的替代品。你可以通过这种方式像访问列表一样访问它:dd.items() - mechanical_meat
你太棒了!! - William
@William:谢谢 :) 一个好问题引出了一个好答案,当这种情况发生时,我们都是赢家!祝你在项目的其余部分一切顺利。 - mechanical_meat
您好,我刚刚编辑了问题,现在它更难了,您能帮忙吗?非常感谢! - William
@William:我认为由于目的有些不同,现在将这个问题保留原样可能更有意义,并创建一个新问题来涵盖变化。 - mechanical_meat
1
您好,我刚创建了一个新的问题,请问能帮忙解决吗?非常感谢!https://dev59.com/0sDqa4cB1Zd3GeqPfIJn - William

1
l = [ 
      {'SNAPSHOT': {'SnapshotVersion': '304'}},
      {'SNAPSHOT': {'SnapshotCreationDate': '2015-06-21 17:33:41'}},
      {'CafeData': {'CafeVersion': '2807'}}, 
      {'CafeData': {'IsSoftwareOnly': '1'}}, 
      {'CafeData': {'IsPassportTCPIP': '1'}} 
]

mrgdict={}
    
for d in l:
    for key, value in d.items():
        if key in mrgdict:
            mrgdict[key].update(value)
        else:
            mrgdict[key]=value

dict={}
l1=[]
    
for key,value in mrgdict.items():
    dict[key]=value
    l1.append(dict)
    dict={}
print(l1)

您好,我刚刚编辑了问题,现在它更难了,您能帮忙吗?非常感谢! - William
您好,我在这里创建了一个新问题 https://dev59.com/0sDqa4cB1Zd3GeqPfIJn ,能否帮忙解决一下?它与此前的问题不同。 - William

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接