代码之家  ›  专栏  ›  技术社区  ›  William

如何在Python中合并具有相同键的词典

  •  4
  • William  · 技术社区  · 3 年前

    我有这样的数据结构:

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

    有朋友能帮忙吗?非常感谢!

    1 回复  |  直到 3 年前
        1
  •  6
  •   mechanical_meat nazca    3 年前

    使用 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'}})
    
        2
  •  1
  •   Shruti Singhal    3 年前
     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)