嵌套字典中任意深度的删除键

时间:2020-09-09 22:22:59

标签: python python-3.x dictionary

我的目标是从嵌套字典中删除一个值。

说我有字典:d = {'a': {'b': {'c': 10, 'd': 4}}}

我知道我可以做到:del d['a']['b']['d']

但是我有一个未知长度的嵌套键列表。如果我有列表['a', 'b', 'd'],我想产生与上述相同的行为。问题是我不知道使用上述语法的键列表的长度。

要访问具有相同输入的值,这很容易:

def dict_get_path(dict_in: Dict, use_path: List):
    # Get the value from the dictionary, where (eg)
    # use_path=['this', 'path', 'deep'] -> dict_in['this']['path']['deep']
    for p in use_path:
        dict_in = dict_in[p]
    return dict_in

但是我无法找到任何类似的方法来删除而不重建整个字典。

1 个答案:

答案 0 :(得分:2)

使用相同的循环,但在最后一个键之前停止。然后使用它从最里面的字典中删除。

def dict_del_path(dict_in: Dict, use_path: List):
    # Loop over all the keys except last
    for p in use_path[:-1]:
        dict_in = dict_in[p]
    # Delete using last key in path
    del dict_in[use_path[-1]]