Order a list to get a hierarchical order

Peter Otten __peter__ at web.de
Fri Jun 8 14:10:13 CEST 2012

Ivars Geidans wrote:

> def append_node(n, l, ls):
>     ls.append(n)
>     for c in [nc for nc in l if nc.parent is n]:
>         append_node(c, l, ls)
>     return ls
> def sort_nodes(l):
>     ls = []
>     for r in l:
>         if r.parent == None:
>             append_node(r, l, ls)
>     return ls

This ensures that child nodes appear after their parent but leaves the order 
of nodes on the same level undefined. I think adding

def sort_nodes(l):
      l = sorted(l, key=lambda node: node.name) #untested

would fix that.

More information about the Python-list mailing list