Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果键等于给定键,如何删除嵌套字典中的所有键_Python - Fatal编程技术网

Python 如果键等于给定键,如何删除嵌套字典中的所有键

Python 如果键等于给定键,如何删除嵌套字典中的所有键,python,Python,我有一个动态更新的嵌套字典,所以我永远不知道有多少层。我需要做的是删除字典中与给定键相等的所有条目,例如“command” 我试着在dict中循环,但我发现级别的数量在运行时会发生变化,所以这不起作用。我在想,也许这应该使用递归,但如果可以的话,我想避免这种情况。 我已经包括了一个模拟dict的示例,我想要的是删除=命令的所有键 data = { 'id': 1, 'name': 'Option 1', 'command': do_some

我有一个动态更新的嵌套字典,所以我永远不知道有多少层。我需要做的是删除字典中与给定键相等的所有条目,例如“command”

我试着在dict中循环,但我发现级别的数量在运行时会发生变化,所以这不起作用。我在想,也许这应该使用递归,但如果可以的话,我想避免这种情况。 我已经包括了一个模拟dict的示例,我想要的是删除=命令的所有键

    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'}}}