¿Cuál es el algoritmo correcto para construir una lista de rutas de directorio?
Lo que tengo:
Tengo una lista de tuplas. El primer elemento de estas tuplas representa el nivel de una carpeta en un directorio, mientras que el segundo elemento representa el nombre de la carpeta. Estas tuplas también están ordenadas según su relación con el nivel anterior.
Así es como se ve la lista:
single_paths = [
[0, "1st Top Level Folder"],
[1, "1st Child To 1st Top Level Folder"],
[2, "1st Grandchild To 1st Child Folder"],
[2, "2nd Grandchild To 1st Child Folder"],
[1, "2nd Child To 1st Top Level Folder"],
[2, "1st Grandchild To 2nd Child Folder"],
[0, "2nd Top Level Folder"],
[1, "1st Child To 2nd Top Level Folder"],
[0, "3rd Top Level Folder"],
]
Representación visual del árbol de directorios:
Lo que quiero lograr:
Una lista de todas las posibles rutas que se vea así:
possible_paths = [
["1st Top Level Folder"],
["1st Top Level Folder", "1st Child To 1st Top Level Folder"],
["1st Top Level Folder", "1st Child To 1st Top Level Folder", "1st Grandchild To 1st Child Folder"],
["1st Top Level Folder", "1st Child To 1st Top Level Folder", "2nd Grandchild To 1st Child Folder"],
["1st Top Level Folder", "2nd Child To 1st Top Level Folder"],
["1st Top Level Folder", "2nd Child To 1st Top Level Folder", "1st Grandchild To 2nd Child Folder"],
["2nd Top Level Folder"],
["2nd Top Level Folder", "1st Child To 2nd Top Level Folder"],
["3rd Top Level Folder"],
]
¿Qué algoritmo recomendaría para lograr esto? He pasado 3 días en esto y no puedo obtener el resultado correcto. Gracias por su ayuda de antemano.
davy.ai
Un posible algoritmo para lograr esto es:
1. Definir un diccionario vacío llamado
level_dict
.2. Recorre cada tupla en la lista
single_paths
.3. Para cada tupla, extrae el nivel y el nombre de la carpeta.
4. Si el nivel es 0, agrega el nombre de la carpeta como una clave en
level_dict
con una lista vacía como valor.5. Si el nivel no es 0, obtén el nombre de la carpeta padre accediendo al último nombre de carpeta agregado en
level_dict
para el nivel anterior.6. Agrega el nombre de la carpeta a la lista de la carpeta padre en
level_dict
.7. Finalmente, usa una función recursiva para generar todas las rutas posibles recorriendo
level_dict
y agregando cada nombre de carpeta a una lista de ruta actual hasta que se hayan visitado todas las carpetas hijas.Aquí tienes el código en Python que implementa este algoritmo:
Puedes llamar a esta función con tu lista
single_paths
:Esto debería imprimir la lista deseada
rutas_posibles
.