将多个嵌套词典合并到同一个词典下
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
例如有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