字典 1:
{
'level_1_a': 1,
'level_1_b': {
'level_2_a': 2,
'level_2_b': {
'level_3_a': 3
},
'level_2_c': {
'level_3_b': 4
}
}
}
字典2:
{
'level_1_a': 2,
'level_1_b': {
'level_2_a': 2,
'level_2_b': {
'level_3_a': 2
},
'level_2_c': {
'level_3_b': 2
}
}
}
期望的輸出:
{
'level_1_a': [1,2]
'level_1_b': {
'level_2_a': 2,
'level_2_b': {
'level_3_a': [3,2]
},
'level_2_c': {
'level_3_b': [4,2]
}
}
}
我想在不替換鍵項的情況下遞回合并字典,并在鍵存在時為值創建一個串列。level_2_a 上所需的輸出可以是單級串列。
uj5u.com熱心網友回復:
這是一個遞回合并:
import collections.abc
def merge(a, b, path=None):
if path is None: path = []
for key in b:
if key in a:
if isinstance(a[key], collections.abc.Mapping) and isinstance(b[key], collections.abc.Mapping):
merge(a[key], b[key], path [str(key)])
elif a[key] != b[key]:
a[key]=[a[key],b[key]]
else:
pass
else:
a[key] = b[key]
return a
以你的例子:
>>> merge(dict1,dict2)
>>> dict1
{"level_1_a": [1, 2],
"level_1_b": {
"level_2_a": 2,
"level_2_b": {
"level_3_a": [3, 2]},
"level_2_c": {
"level_3_b": [4, 2]}}}
注意: dict 具有破壞性,a因此如果您想要原始的 LH dict,請進行深拷貝。
注2:這在應用上是非常有限的。主要針對給出的例子。如果值是串列或字典等,則不起作用
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/365739.html
上一篇:在python中將串列轉換為字典
