Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将类似目录树的字符串转换为嵌套列表数据结构python_Python_Algorithm_Sorting_Data Structures - Fatal编程技术网

将类似目录树的字符串转换为嵌套列表数据结构python

将类似目录树的字符串转换为嵌套列表数据结构python,python,algorithm,sorting,data-structures,Python,Algorithm,Sorting,Data Structures,我有一个类似目录树的字符串列表。我想将其转换为嵌套列表(或另一种数据结构),以强调相关性。 例如,输入: 层次结构列表 需要转换为: 其中“->”符号“contains”(以数组属性或等效形式) dir1包含dir1.1、1.2、1.3的列表 目录1.1包含目录1.1.1、目录1.1.2的列表 等等 有人知道如何在Python(算法和实现)中实现吗?通过一点递归和一个类似于: 代码: 测试代码: 结果: 对于每个路径,您只需在“/”上对其进行split()it,然后在它们之间循环添加到现有密钥或

我有一个类似目录树的字符串列表。我想将其转换为嵌套列表(或另一种数据结构),以强调相关性。 例如,输入:

层次结构列表 需要转换为: 其中“->”符号“contains”(以数组属性或等效形式)

dir1包含dir1.1、1.2、1.3的列表

目录1.1包含目录1.1.1、目录1.1.2的列表

等等


有人知道如何在Python(算法和实现)中实现吗?

通过一点递归和一个类似于:

代码: 测试代码: 结果:
对于每个路径,您只需在“/”上对其进行
split()
it,然后在它们之间循环添加到现有密钥或根据需要创建密钥,然后将其分配给下一步要考虑的当前父级。例如:

arr= ['dir1','dir1/dir1.1','dir1/dir1.2','dir1/dir1.3/dir1.3.1/dir1.3.1.1', 'dir1/dir1.1/dir1.1.1','dir1/dir1.1/dir1.1.2']

d = dict()
for path in arr:
    parent = d
    for dir in path.split('/'):    
        if dir not in parent:
            parent[dir] = dict()
        parent = parent[dir]
结果
d
如下所示:

{'dir1': {'dir1.1': {'dir1.1.1': {}, 'dir1.1.2': {}},
          'dir1.2': {},
          'dir1.3': {'dir1.3.1': {'dir1.3.1.1': {}}}
          }
}

谢谢,伙计!问题是我不知道层次结构有多深。。。寻找上面的递归解决方案谢谢!这看起来真是个好办法。我有一个关于递归的想法,但它停留在我的后脑勺里。。。
def build_dir_dict(dir_name_strings):

    def _build_dir_dict(path_pieces, dir_dict):
        print(path_pieces)
        if path_pieces:
            if not path_pieces[0]:
                _build_dir_dict(path_pieces[1:], dir_dict)
            else:
                if path_pieces[0] not in dir_dict:
                    dir_dict[path_pieces[0]] = {}
                _build_dir_dict(path_pieces[1:], dir_dict[path_pieces[0]])

    result = {}
    for dir_name_string in dir_name_strings:
        if dir_name_string:
            _build_dir_dict(dir_name_string.split('/'), result)
    return result
data = [x.strip() for x in """
    dir1 
    dir1/dir1.1
    dir1/dir1.2 
    dir1/dir1.3/dir1.3.1/dir1.3.1.1 
    dir1/dir1.1/dir1.1.1 
    dir1/dir1.1/dir1.1.2
""".split('\n')[1:-1]]

print(build_dir_dict(data))
{'dir1': {'dir1.1': {'dir1.1.1': {}, 'dir1.1.2': {}}, 
          'dir1.2': {}, 
          'dir1.3': {'dir1.3.1': {'dir1.3.1.1': {}}}
    }
}
arr= ['dir1','dir1/dir1.1','dir1/dir1.2','dir1/dir1.3/dir1.3.1/dir1.3.1.1', 'dir1/dir1.1/dir1.1.1','dir1/dir1.1/dir1.1.2']

d = dict()
for path in arr:
    parent = d
    for dir in path.split('/'):    
        if dir not in parent:
            parent[dir] = dict()
        parent = parent[dir]
{'dir1': {'dir1.1': {'dir1.1.1': {}, 'dir1.1.2': {}},
          'dir1.2': {},
          'dir1.3': {'dir1.3.1': {'dir1.3.1.1': {}}}
          }
}