Python 如果键等于给定键,如何删除嵌套字典中的所有键
我有一个动态更新的嵌套字典,所以我永远不知道有多少层。我需要做的是删除字典中与给定键相等的所有条目,例如“command” 我试着在dict中循环,但我发现级别的数量在运行时会发生变化,所以这不起作用。我在想,也许这应该使用递归,但如果可以的话,我想避免这种情况。 我已经包括了一个模拟dict的示例,我想要的是删除=命令的所有键Python 如果键等于给定键,如何删除嵌套字典中的所有键,python,Python,我有一个动态更新的嵌套字典,所以我永远不知道有多少层。我需要做的是删除字典中与给定键相等的所有条目,例如“command” 我试着在dict中循环,但我发现级别的数量在运行时会发生变化,所以这不起作用。我在想,也许这应该使用递归,但如果可以的话,我想避免这种情况。 我已经包括了一个模拟dict的示例,我想要的是删除=命令的所有键 data = { 'id': 1, 'name': 'Option 1', 'command': do_some
data = {
'id': 1,
'name': 'Option 1',
'command': do_something,
'sub_opt': {
'id': 10,
'name': 'Sub Option',
'command': do_something_more,
'sub_sub_opt': {
'id': 100,
'name': 'Sub Sub Option',
'command': do_something_crazy,
}
}
}
我知道您试图避免递归,但代码并没有那么糟糕。这里有一个例子。(我将“命令”键的值更改为字符串。)
递归是处理任何深度未知的嵌套数据结构的方法。你为什么要避免它?我发现代码更容易理解。你尝试过什么吗?只是试着让我的头脑围绕着如何递归地做。另一个选择是简化字典-值得研究。
def delete(data, key):
data.pop(key, None)
for k, v in data.items():
if isinstance(v, dict):
delete(v, key)
delete(data, 'command')
print(data)
{'id': 1, 'name': 'Option 1', 'command': 'do_something', 'sub_opt': {'id': 10, 'name': 'Sub Option', 'command': 'do_something_more', 'sub_sub_opt': {'id': 100, 'name': 'Sub Sub Option', 'command': 'do_something_crazy'}}}
{'id': 1, 'name': 'Option 1', 'sub_opt': {'id': 10, 'name': 'Sub Option', 'sub_sub_opt': {'id': 100, 'name': 'Sub Sub Option'}}}