Плоский список к дереву: обрабатывать плохие ссылки, чтобы сделать правильные

Это рабочий код для плоского списка проектирования скважин для получения дерева:

 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 детей?

0 ответов

Другие вопросы по тегам