首页 > 解决方案 > 如果键等于给定键,如何删除嵌套字典中的所有键

问题描述

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

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

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

标签: python

解决方案


我知道您试图避免递归,但代码并不是那么糟糕。这是一个例子。(我将“命令”键的值更改为字符串。)

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

推荐阅读