将类似目录树的字符串转换为嵌套列表数据结构python
我有一个类似目录树的字符串列表。我想将其转换为嵌套列表(或另一种数据结构),以强调相关性。 例如,输入: 层次结构列表 需要转换为: 其中“->”符号“contains”(以数组属性或等效形式) dir1包含dir1.1、1.2、1.3的列表 目录1.1包含目录1.1.1、目录1.1.2的列表 等等将类似目录树的字符串转换为嵌套列表数据结构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,然后在它们之间循环添加到现有密钥或
有人知道如何在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': {}}}
}
}