nodes = [
{ 'id':1, 'parent_id':None, 'name':'a' },
{ 'id':2, 'parent_id':None, 'name':'b' },
{ 'id':3, 'parent_id':2, 'name':'c' },
{ 'id':4, 'parent_id':2, 'name':'d' },
{ 'id':5, 'parent_id':4, 'name':'e' },
{ 'id':6, 'parent_id':None, 'name':'f' }
]
output = ''
def build_node(node):
global output
output += '<li><a>'+node['name']+'</a>'
subnodes = [subnode for subnode in nodes if subnode['parent_id'] == node['id']]
if len(subnodes) > 0 :
output += '<ul>'
[build_node(subnode) for subnode in subnodes]
output += '</ul>'
output += '</li>'
return node
output += '<ul>'
node_tree = [build_node(node) for node in nodes if node['parent_id'] == None]
output += '</ul>'
import pprint
pprint.pprint(node_tree)
print output
bm9kZXMgPSBbIAp7ICdpZCc6MSwgJ3BhcmVudF9pZCc6Tm9uZSwgJ25hbWUnOidhJyB9LAp7ICdpZCc6MiwgJ3BhcmVudF9pZCc6Tm9uZSwgJ25hbWUnOidiJyB9LAp7ICdpZCc6MywgJ3BhcmVudF9pZCc6MiwgJ25hbWUnOidjJyB9LAp7ICdpZCc6NCwgJ3BhcmVudF9pZCc6MiwgJ25hbWUnOidkJyB9LAp7ICdpZCc6NSwgJ3BhcmVudF9pZCc6NCwgJ25hbWUnOidlJyB9LAp7ICdpZCc6NiwgJ3BhcmVudF9pZCc6Tm9uZSwgJ25hbWUnOidmJyB9Cl0KCm91dHB1dCA9ICcnCgpkZWYgYnVpbGRfbm9kZShub2RlKToKCWdsb2JhbCBvdXRwdXQKCW91dHB1dCArPSAnPGxpPjxhPicrbm9kZVsnbmFtZSddKyc8L2E+JwoJc3Vibm9kZXMgPSBbc3Vibm9kZSBmb3Igc3Vibm9kZSBpbiBub2RlcyBpZiBzdWJub2RlWydwYXJlbnRfaWQnXSA9PSBub2RlWydpZCddXQoJaWYgbGVuKHN1Ym5vZGVzKSA+IDAgOiAKCQlvdXRwdXQgKz0gJzx1bD4nCgkJW2J1aWxkX25vZGUoc3Vibm9kZSkgZm9yIHN1Ym5vZGUgaW4gc3Vibm9kZXNdCgkJb3V0cHV0ICs9ICc8L3VsPicKCW91dHB1dCArPSAnPC9saT4nCglyZXR1cm4gbm9kZQoKb3V0cHV0ICs9ICc8dWw+Jwpub2RlX3RyZWUgPSBbYnVpbGRfbm9kZShub2RlKSBmb3Igbm9kZSBpbiBub2RlcyBpZiBub2RlWydwYXJlbnRfaWQnXSA9PSBOb25lXQpvdXRwdXQgKz0gJzwvdWw+JwkKCmltcG9ydCBwcHJpbnQKcHByaW50LnBwcmludChub2RlX3RyZWUpCgpwcmludCBvdXRwdXQK
[{'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>