У меня есть несколько UserInvites, где приглашение имеет from
и to
Свойства пользователя.
Например,
UserInvite1.from = User1
UserInvite1.to = User2
UserInvite1b.from = User1
UserInvite1b.to = User4
UserInvite2.from = User2
UserInvite2.to = User3
UserInvite3.from = User2
UserInvite3.to = User5
Таким образом, Пользователь1 пригласил Пользователя2 и Пользователя4;Пользователь2 пригласил Пользователя3 и Пользователя5.
Учитывая список этих приглашений, например, [UserInvite1, UserInvite2, ... ]
, или другое средство итерации по ним (?), Как я могу сгенерировать «иерархический» (вложенный) список, представляющий этипригласил?
Например, начиная с «root» User1, я бы хотел, чтобы вложенный список был таким:
>>> make_nest_list_from_invites([invites])
[User1, [User2, [User3, User5], User4]]
Если вы знакомы с Django, я пытаюсь получить отмои "приглашения" к чему-то иерархическому, что я могу передать тегу шаблона Django unordered_list
Очевидно, что это что-то вроде обхода дерева, но я в настоящий момент в тупике.Я попробовал некоторые рекурсивные вещи, но продолжал в конечном итоге с дополнительным уровнем вложенности в местах, которые отбрасывали вещи.
ОБНОВЛЕНИЕ: Пример чего-то, что я попробовал
def tree_from_here(user):
children = get_children(user)
if children:
return [user, [tree_from_here(c) for c in children]]
else:
return user
, что дает:
>>> tree_from_here(User1)
[<User: 1>, [[<User: 2>, [<User: 3>, <User: 5>]], <User: 4>]]
, что почти правильно для моего текущего набора пользователей, сисключение , что вложение слишком глубоко во второй элемент.
Я пытаюсь:
[<User: 1>, [<User: 2>, [<User: 3>, <User: 5>], <User: 4>]]
Я чувствую, что это смотрит мне в лицо, но я не уверен, как вернуть правильную вещь в данный момент.