从字典B中减去字典A(深度删除)?
如果我有一个层层嵌套的字典,是否有内置的方法可以从这个字典中减去或移除一系列的“路径”(比如:keyA.keyB.key1,keyA.keyC.key2等等),或者从另一个字典的键中移除这些键?或者有没有什么常用的模块可以实现这样的功能?
3 个回答
2
如果其他回答没有满足你的需求,这里有一个方法可以从一个字典中减去另一个字典的内容。
def subtract(a, b):
""" Remove the keys in b from a. """
for k in b:
if k in a:
if isinstance(b[k], dict):
subtract(a[k], b[k])
else:
del a[k]
2
这里有个建议:
D = { "keyA": {
"keyB" : {
"keyC" : 42,
"keyD": 13
},
"keyE" : 55
}
}
def remove_path(dictionary, path):
for node in path[:-1]:
dictionary = dictionary[node]
del dictionary[path[-1]]
remove_path(D, ["keyA", "keyB", "keyD"])
print D # prints {'keyA': {'keyB': {'keyC': 42}, 'keyE': 55}}
你可能还想加一些错误检查的功能。
1
还有一种解决方案:
d = {
'A' : {
'C' : {
'D' : {
'E' : 4,
},
'F' : 5,
},
},
'B' : 2,
}
def DeepDictDel(path, dict):
for key in path.split('.'):
owner = dict
dict = dict[key]
del owner[key]
print d # prints {'A': {'C': {'D': {'E': 4}, 'F': 5}}, 'B': 2}
DeepDictDel('A.C.D', d)
print d # prints {'A': {'C': {'F': 5}}, 'B': 2}