Плоский список к дереву: обрабатывать плохие ссылки, чтобы сделать правильные
Это рабочий код для плоского списка проектирования скважин для получения дерева:
data = [('john','marry'),('mike','john'),('mike','hellen')('john','elisa')]
roots = set()
mapping = {}
for parent,child in data:
childitem = mapping.get(child,None)
if childitem is None:
childitem = {}
mapping[child] = childitem
else:
roots.discard(child)
parentitem = mapping.get(parent,None)
if parentitem is None:
mapping[parent] = {child:childitem}
roots.add(parent)
else:
parentitem[child] = childitem
tree = {id : mapping[id] for id in roots}
print (tree)
К сожалению, мой плоский список иногда меняется, как этот:
data = [('marry','john'),('john','mike'),('mike','hellen'),('john','elisa')]
Итак, как я могу сделать рекурсивную проверку и поменять местами строки, когда это необходимо для известного главы и n детей?