如果我有一个深度嵌套的dict有一个内置的方法来减去/删除“路径”列表(例如:keyA.keyB.key1,keyA.keyC.key2等)或一秒钟的键来自原始字典的字典?或者也许有一个具有这种功能的通用模块?
答案 0 :(得分: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 :(得分: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 :(得分: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}