【问题标题】:How to merge dictionary having same keys如何合并具有相同键的字典
【发布时间】:2021-04-30 04:11:21
【问题描述】:

我有这样的数据结构:

    [ {'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'}} 
 
]

【问题讨论】:

    标签: python list dictionary


    【解决方案1】:

    使用https://docs.python.org/3/library/collections.html#collections.defaultdict 在遇到新键时在defaultdict 中创建一个dict。

    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().
    • 你太棒了!!
    • @William:谢谢 :) 一个好问题带来了一个好答案,当这种情况发生时我们都赢了!祝您项目的其余部分一切顺利。
    • 您好,先生,我刚刚编辑了问题,现在更难了,您能帮忙解决一下吗,非常感谢!
    • 您好,先生,我刚刚在这里创建了一个新问题,您能帮忙解决一下吗!非常感谢!stackoverflow.com/questions/67337059/…
    【解决方案2】:
    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)
    

    【讨论】:

    • 您好,先生,我刚刚编辑了问题,现在更难了,您能帮忙解决一下吗,非常感谢!
    • 你好先生,我在这里创建了一个新问题stackoverflow.com/questions/67337059/…你能帮忙吗,它与这个问题不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    相关资源
    最近更新 更多