from random import randint
varss = [{'id': x, 'parent': randint(0, 10)} for x in range(10)]
vars_ = [{'id': x, 'parent': None} for x in range(10, 15)]
vars_ += varss
def pretty(d, indent=0):
if isinstance(d, list):
for x in d:
pretty(x, indent + 1)
else:
for key, value in d.iteritems():
print ('\t' * indent + str(key))
if isinstance(value, dict):
pretty(value, indent + 1)
else:
print('\t' * (indent + 1) + str(value))
def sort_tree(items):
res = []
first_column = [x for x in items if x.get('id') == 0 or
x.get('parent') is None]
first_column = sorted(
first_column, key=lambda y: y.get('id')) # reverse=True
items_dict = {}
for x in items:
x['children'] = []
items_dict[x['id']] = x
items = sorted(items, key=lambda y: y.get('id'))
for x in items:
id = x.get('parent')
if not id:
continue
items_dict[id]["children"].append(x)
print(items)
return first_column
# print(vars_)
print(pretty(sort_tree(vars_)))