Ivars Geidans wrote: > Something like this?
Or this (I'm reusing some of your code but let the built-in sorted() do the hard work): #!/usr/bin/env python3 import random def _reverse_iterpath(node): while node is not None: yield node.name node = node.parent def path(node): return tuple(_reverse_iterpath(node))[::-1] class Node: def __init__(self, parent, name): self.parent = parent self.name = name def __repr__(self): return "/".join(path(self)) def show(caption, node_list): print(caption.center(len(caption)+10, "-")) for node in node_list: print(node) print() if __name__ == "__main__": p_1 = Node(None, 'Parent #1') p_2 = Node(None, 'Parent #2') c_1_1 = Node(p_1, 'Child #1.1') c_1_1_1 = Node(c_1_1, 'Child #1.1.1') c_1_1_2 = Node(c_1_1, 'Child #1.1.2') c_1_2 = Node(p_1, 'Child #1.2') c_2_1 = Node(p_2, 'Child #2.1') node_list = [p_1, p_2, c_1_1, c_1_1_1, c_1_1_2, c_1_2, c_2_1] random.shuffle(node_list) show("before", node_list) show("after", sorted(node_list, key=path)) -- http://mail.python.org/mailman/listinfo/python-list