def convert2tree(data):
result = []
obj = {}
for x in data:
obj[x.get("id", "")] = x
for x in data:
parent_id = x.get("parent_id")
if parent_id:
parent = obj.get(parent_id, {})
if parent:
if not parent.get("children"):
parent["children"] = []
if not x.get("children"):
x["children"] = []
parent["children"].append(x)
else:
if not x.get("children"):
x["children"] = []
result.append(x)
else:
if not x.get("children"):
x["children"] = []
result.append(x)
return result
resources = [{"id": 7, "name": "test1", "parent_id": 2},
{"id": 2, "name": "test2", "parent_id": None},
{"id": "9", "name": "test3", "parent_id": 2},
{"id": 12, "name": "test4", "parent_id": 7},
{"id": 8, "name": "test5", "parent_id": 2}]
print(convert2tree(resources))