import json
arr = [
{'key': '0-0', 'title': '0-0', 'parent_key': '0', 'leaf': False},
{'key': '0-1', 'title': '0-1', 'parent_key': '0', 'leaf': False},
{'key': '0-0-0', 'title': '0-0-0', 'parent_key': '0-0', 'leaf': False},
{'key': '0-1-0', 'title': '0-1-0', 'parent_key': '0-1', 'leaf': True},
{'key': '0-0-1', 'title': '0-0-1', 'parent_key': '0-0', 'leaf': True},
{'key': '0-1-1', 'title': '0-1-1', 'parent_key': '0-1', 'leaf': True},
{'key': '0-0-0-0', 'title': '0-0-0-0', 'parent_key': '0-0-0', 'leaf': True}
]
def arr2tree(source, parent):
tree = []
for item in source:
if item["parent_key"] == parent:
if not item['leaf']:
item["children"] = arr2tree(source, item["key"])
tree.append(item)
return tree
if __name__ == '__main__':
result = arr2tree(arr, '0')
print(json.dumps(result))