删除嵌套python字典中的特定元素

时间:2021-03-24 16:50:02

标签: python python-3.x dictionary

所以我有一个特定的函数可以输出对应于文件列表的嵌套字典,如下所示:

{'.gitignore': {}, 'examples': {'apishowcase': {'apishowcase.py': {}, 'static': {'style.css': {}}, 'templates': {'counter.html': {}}}}}

我需要删除这些字典的特定实例,例如,使用以下输入:

["examples", "apishowcase", "apishowcase.py"]

我想导航到 dic["examples"]["apishowcase"] 并删除 apishowcase.py 字典,但是,我一直在努力理解我如何准确地导航到这个特定的字典,因为输入列表可以有任何大小和嵌套的字典因许多变量而异。

谁能帮我一把?提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以编写一个函数,递归地进入嵌套字典,直到只剩下一个键为止,然后调用 .pop 删除该条目。

def remove_item(data, key):
    if len(key) == 1:
        data.pop(key[0])
    else:
        remove_item(data[key[0]], key[1:])

示例用法

>>> data
{'.gitignore': {}, 'examples': {'apishowcase': {'apishowcase.py': {}, 'static': {'style.css': {}}, 'templates': {'counter.html': {}}}}}
>>> remove_item(data, ["examples", "apishowcase", "apishowcase.py"])
>>> data
{'.gitignore': {}, 'examples': {'apishowcase': {'static': {'style.css': {}}, 'templates': {'counter.html': {}}}}}

例如,可以向该函数添加一些错误处理以处理不存在此类键的情况。

答案 1 :(得分:1)

您可以使用functools.reduce

data = {'.gitignore': {}, 'examples': {'apishowcase': {'apishowcase.py': {}, 'static': {'style.css': {}}, 'templates': {'counter.html': {}}}}}
path = ["examples", "apishowcase", "apishowcase.py"]

reduce(dict.get, path[:-1], data).pop(path[-1])
print(data)

输出:

{'.gitignore': {}, 'examples': {'apishowcase': {'static': {'style.css': {}}, 'templates': {'counter.html': {}}}}}
相关问题