所以我有一个特定的函数可以输出对应于文件列表的嵌套字典,如下所示:
{'.gitignore': {}, 'examples': {'apishowcase': {'apishowcase.py': {}, 'static': {'style.css': {}}, 'templates': {'counter.html': {}}}}}
我需要删除这些字典的特定实例,例如,使用以下输入:
["examples", "apishowcase", "apishowcase.py"]
我想导航到 dic["examples"]["apishowcase"]
并删除 apishowcase.py 字典,但是,我一直在努力理解我如何准确地导航到这个特定的字典,因为输入列表可以有任何大小和嵌套的字典因许多变量而异。
谁能帮我一把?提前致谢。
答案 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': {}}}}}