Ваш пример не соответствует приведенным данным, но это должно быть тем, что вы хотите.
Это не рекурсивно, потому что рекурсия здесь не имеет смысла: входные данные не имеют рекурсивной структуры (это то, что мы создаем), поэтому все, что вы можете написать как рекурсию, это цикл ... и это довольно бессмысленно что делать в Python.
data = [ (1,0,"parent1"), (2,0,"parent2"), (3,1,"child1"), (4,3,"child2")]
# first, you have to sort this by the parentid
# this way the parents are added before their children
data.sort(key=lambda x: x[1])
def make_tree( data ):
treemap = {} # for each id, give the branch to append to
trees = {}
for id,parent,name in data:
# {} is always a new branch
if parent == 0: # roots
# root elements are added directly
trees[name] = treemap[id] = {}
else:
# we add to parents by looking them up in `treemap`
treemap[parent][name] = treemap[id] = {}
return trees
tree = make_tree( data )
print tree['parent1']['child1'].keys() ## prints all children: ["child2"]