fork download
  1. nodes = [
  2. { 'id':1, 'parent_id':None, 'name':'a' },
  3. { 'id':2, 'parent_id':None, 'name':'b' },
  4. { 'id':3, 'parent_id':2, 'name':'c' },
  5. { 'id':4, 'parent_id':2, 'name':'d' },
  6. { 'id':5, 'parent_id':4, 'name':'e' },
  7. { 'id':6, 'parent_id':None, 'name':'f' }
  8. ]
  9.  
  10. output = ''
  11.  
  12. def build_node(node):
  13. global output
  14. output += '<li><a>'+node['name']+'</a>'
  15. subnodes = [subnode for subnode in nodes if subnode['parent_id'] == node['id']]
  16. if len(subnodes) > 0 :
  17. output += '<ul>'
  18. [build_node(subnode) for subnode in subnodes]
  19. output += '</ul>'
  20. output += '</li>'
  21. return node
  22.  
  23. output += '<ul>'
  24. node_tree = [build_node(node) for node in nodes if node['parent_id'] == None]
  25. output += '</ul>'
  26.  
  27. import pprint
  28. pprint.pprint(node_tree)
  29.  
  30. print output
  31.  
Success #stdin #stdout 0.01s 6376KB
stdin
Standard input is empty
stdout
[{'id': 1, 'name': 'a', 'parent_id': None},
 {'id': 2, 'name': 'b', 'parent_id': None},
 {'id': 6, 'name': 'f', 'parent_id': None}]
<ul><li><a>a</a></li><li><a>b</a><ul><li><a>c</a></li><li><a>d</a><ul><li><a>e</a></li></ul></li></ul></li><li><a>f</a></li></ul>