将多个嵌套词典合并到同一个词典下

merge multiple nested dictionaries under a same dictionary

例如有dicA

dicA = {"01Feb":{"a":{"M1":[2,1,3,3],
                  "M2":[3,5,7,9],
                  "L3":[1,1,1,1]
                  },
            "b":{"M1":[2,4,8,1],
                 "M2":[1,1,2,0],
                 "L3":[3,4,6,8]}
                 },
    "02Feb":{"a":{"M1":[2,3,1,1],
                  "M2":[6,5,6,9]
                 },
             "b":{"M1":[2,4,8,1],
                  "M2":[1,1,2,0],
                  "L3":[3,4,6,8]
                  },
             "c":{"M1":[2,3,1,1],
                  "M2":[6,5,6,9],
                  "L3":[0,0,1,1]}
                  },
    "03Feb":{"a":{"M1":[3,3,3,3],
                  "M2":[5,5,7,7],
                  "L3":[3,3,3,3]}
                  }}

这对我来说有点复杂,里面的列表长度相同。 我想将 M1 和 M2 合并为 M,同时只保留 L3。应该是这样的:

dicA = {{"01Feb":{"a":{"M":[5,6,10,12]},                  
                      {"L3":[1,1,1,1]}},
                 {"b":{"M":[3,5,10,1]},
                      {"L3":[3,4,6,8]}}},
        {"02Feb":{"a":{"M":[8,8,7,10]}},
                 {"b":{"M":[3,5,10,1]},
                      {"L3":[3,4,6,8]}},
                 {"c":{"M":[8,8,7,10]},
                      {"L3":[0,0,1,1]}}},
        {"03Feb":{"a":{"M":[8,8,10,10]},
                      {"L3":[3,3,3,3]}}}}

然后,我想合并'a'、'b'和'c'。最后应该是这样的:

dicA = {{"01Feb":{"M":[8,11,20,13]},                  
                 {"L3":[4,5,7,9]}},
        {"02Feb":{"M":[19,21,24,21]},
                 {"L3":[3,4,7,9]}},
        {"03Feb":{"M":[8,8,10,10]},
                 {"L3":[3,3,3,3]}}}

因为我post之前有一个类似的问题,所以你们可能认为这是同一个问题。实际上这是一个不同的问题,需要合并多个具有不同键的嵌套字典。评论中的 显示了如何合并 具有相同键的多个嵌套词典 .

这是我在这种情况下合并这两种情况的解决方案。

def merge(dictF):

#create two new dict 
   M_12_merge ={}
  abc_merge={}
  for key in dictF:
      M_12_merge[key]={}
      abc_merge[key]={}
  for key in dictF:
      for subKey in dictF[key]:
          M_12_merge[key][subKey]={}

  for rekey in M_12_merge:
      for sub_rekey in M_12_merge[rekey]:
          M_12_merge[rekey][sub_rekey]['M']=[]

# 1. merge sub_sub_key 'M1' and 'M2' under different keys
  for key in dictF:
      for sub_key in dictF[key]:
          numberList=[]
          for sub_sub_key in dictF[key][sub_key]:
              if 'M' in sub_sub_key:
                  numberList.append(dictF[key][sub_key][sub_sub_key])
              else:
                  M_12_merge[key][subKey][sub_sub_key]=dictF[key][sub_key][sub_sub_key]
          M_12_merge[key][sub_key]['M']=map(sum,zip(*numberList))      

# 2. merge sub_key 'a','b' and 'c' under same keys
  for key in M_12_merge:
      for sub_key in M_12_merge[key]:
          for sub_sub_key in M_12_merge[key][sub_key]:
              if sub_sub_key in abc_merge[key]:
                  abc_merge[key][sub_sub_key] = [sum(x) for x in zip(*[abc_merge[key][sub_sub_key], M_12_merge[key][sub_key][sub_sub_key]])]
              else:
                  abc_merge[key][sub_sub_key] = M_12_merge[key][sub_key][sub_sub_key]                
  return abc_merge


dic = merge(dicA) 
print(dic)

感谢投反对票的人。希望这个解决方案可以帮助到需要它的人。此外,欢迎任何新的想法。

此致,

D