Tengo una lista de dicts que almacena URL. Tiene simplemente dos campos, title
y url
. Ejemplo:Representación de un conjunto de URL en una lista como estructura de árbol
[
{'title': 'Index Page', 'url': 'http://www.example.com/something/index.htm'},
{'title': 'Other Page', 'url': 'http://www.example.com/something/other.htm'},
{'title': 'About Page', 'url': 'http://www.example.com/thatthing/about.htm'},
{'title': 'Detail Page', 'url': 'http://www.example.com/something/thisthing/detail.htm'},
]
Sin embargo, me gustaría obtener una estructura de árbol de esta lista de dicts. Estoy buscando algo como esto:
{ 'www.example.com':
[
{ 'something':
[
{ 'thisthing':
[
{ 'title': 'Detail Page', 'url': 'detail.htm'}
]
},
[
{ 'title': 'Index Page', 'url': 'index.htm'},
{ 'title': 'Other Page', 'url': 'other.htm'}
]
]
},
{ 'thatthing':
[
{ 'title': 'About Page', 'url': 'about.htm'}
]
}
]
}
Mi primer intento de esto sería una sopa urlparse en un montón de los bucles y estoy seguro de que hay una manera mejor y más rápida de hacer esto.
He visto gente en SO que trabaja la magia con listas de comprensión, funciones lambda, etc. Todavía estoy en el proceso de descifrarlo.
(Para los desarrolladores de Django: Voy a utilizar este mi aplicación Django Estoy almacenando las direcciones URL en un modelo llamado Page
que tiene dos campos y name
title
.)
Esto solo parece funcionar para rutas de un nivel profundo. Debería haber sido más explícito. No funciona para URL como esta 'http: // www.example.com/thisthing/thisthing/about.htm'. –
Hola Jro. No estoy en libertad de cambiar los modelos, así que está fuera. La razón para hacer lo anterior es devolver todos estos registros a través de JSON. Tiene razón sobre el hecho de que comprobar si un nodo es una lista para ver si es un conjunto de páginas es feo, pero no he podido pensar en un mejor formato de árbol para representar datos como este. Volví al problema original de intentar convertir esa lista de URL en el formato de datos de ejemplo. Realmente aprecio tu ayuda, pero si de alguna manera pudieras mostrarme cómo convertirla, sería un alivio. He estado golpeando mi cabeza, pero sin suerte. Gracias Jro. –
Aha. Gracias. Thaks, Jro. Ya acepté tu respuesta, pero una pequeña cosa: ¿cómo podría eliminar todos los dicts y listas vacías? ¿Tendría que recurse para atravesar todo el árbol? –