python - 从多级字典中提取所有路径

标签 python dictionary multi-level

我有这样一本字典:

dirDict = {"DIR1" : {
                    "DIR11" : { 
                                "DIR111" : "Maki111",
                                "DIR112" : "Maki112"
                                }, 
                    "DIR12" : "Maki12", 
                    "DIR13" : {
                                "DIR131" : "Maki131"
                                }
                }
    }

将其想象成一个文件夹结构。我想得到类似于 os.walk 的文件夹结构。像这样:

["DIR1/DIR11/DIR111/Maki111",
"DIR1/DIR11/DIR112/Maki112",
"DIR1/DIR12/Maki12",
"DIR1/DIR13/DIR131/Maki131"]

所以它基本上是字典值的所有路径。我用递归函数尝试了很多方法,但我迷路了。

这是我最近的试用版:

def walk(input_dict, path_string = "",  result = ""):
    for key, value in input_dict.items():
        if isinstance(value, dict):
            path_string += "/" + key
            print "==== DICT ====", "\nkey: ", key, "\nvalue: ", value, "\n\t\tpath_string: ", path_string
            result = walk(value, path_string)
            print "\t\t\t\tresulting: ", result
        elif isinstance(value, str):
            print "==== NOT DICT ===="
            path_string += "/" + value
            print "\t\tpath_string: ", path_string, "\nvalue: ", value
            return path_string
        else:
            path_string = "/" + key
        result += "\n" + result
    return result

最佳答案

使用 Python 3:

dirDict = {"DIR1" : {
                    "DIR11" : {
                                "DIR111" : "Maki111",
                                "DIR112" : "Maki112"
                                },
                    "DIR12" : "Maki12",
                    "DIR13" : {
                                "DIR131" : "Maki131"
                                }
                }
    }

def recurse(d, prefix=None, sep='/'):
    if prefix is None:
        prefix = []
    for key, value in d.items():
        if isinstance(value, dict):
            yield from recurse(value, prefix + [key])
        else:
            yield sep.join(prefix + [key, value])

print(list(recurse(dirDict)))

输出:

['DIR1/DIR13/DIR131/Maki131', 'DIR1/DIR11/DIR111/Maki111', 'DIR1/DIR11/DIR112/Maki112', 'DIR1/DIR12/Maki12']

关于python - 从多级字典中提取所有路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33606521/

相关文章:

python - 从 Python 中的几个列表构建字典列表

python - 用另一个字典的值替换字典键

jquery - 使用 ul li 生成 Jquery 多级菜单列表

javascript - 从 Map.values() 选择一个属性

python - 将字典的字符串表示形式转换为字典

Java 多级中断

c - 多级反馈队列初始化的结构

python - 无法在 pynput 中选择文本

python - 我可以在我的win10机器上同时安装python 2.7和3.5吗?

python - 如何在 Python 中运行另一个脚本而不等待它完成?