从元组列表创建树

时间:2009-04-23 19:34:27

标签: python sorting tree

我此刻似乎是瞎了,所以我需要在这里问一下。我想对一个看起来像

的元组列表进行排序
(id, parent_id, value)

这样它就可以将树表示为树节点列表的平坦列表。

例如输入

(1, None, '...')
(3, 2', '...')
(2, 1, '...')
(4, 1, '...')
(5, 2, '...')
(6, None, '...')

之后应该按照那样排序

(1, None, '...')
(2, 1, '...')
(3, 2', '...')
(5, 2, '...')
(4, 1, '...')
(6, None, '...')

任何提示都将受到高度赞赏。提前谢谢。

3 个答案:

答案 0 :(得分:3)

Python从左到右对元组进行排序,因此如果你安排元组,那么第一个排序键是第一个项目,依此类推,它将具有相当的效率。

从您所描述的内容中,从元组列表到树的映射并不清楚。请把它画出来,或者更彻底地解释一下。例如,您的示例似乎是:

tree diagram
(来源:sabi.net

如果你有两个没有父节点的节点,那就更像是森林而不是树。你想用树代表什么?在这种情况下,“排序”是什么意思?

答案 1 :(得分:1)

我不确定我是否完全遵循你正在尝试做的事情,但如果你有一个森林作为节点列表,你不能只读它并构建树结构,然后写出来作为所有树木的面包优先遍历?有什么特别的理由可以避免这种情况吗?

答案 2 :(得分:0)

奥利弗,如果我理解正确的话,我想你也可以 (a)将数据库中的所有元组检索到字典或列表中,然后构造树, 要么 (b)在检索元组时使用ORDER BY子句,使它们按照将它们添加到树中的顺序排列。

如果可以在您的应用程序中对树进行更改然后传播到数据库,我会选择a,但是如果更改总是作为数据库插入,更新或删除,除了这些更改,您的树将被读取 - 只有,那么选项b应该更快,并且需要更少的资源。

罗兰