Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从元组列表创建树_Python_Sorting_Tree - Fatal编程技术网

Python 从元组列表创建树

Python 从元组列表创建树,python,sorting,tree,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, '..

我现在好像是瞎了,所以我需要问一下。我想对一个元组列表进行排序,看起来像这样

(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, '...')

任何暗示都将不胜感激。提前感谢。

Python从左到右对元组进行排序,因此,如果您将元组排列为第一个排序键是第一个项,依此类推,将相当有效

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


(来源:)


如果有两个节点没有父节点,那么这更像是一个森林而不是一棵树。你想用这棵树表现什么?在这个上下文中,“排序”是什么意思?

我不确定我是否完全遵循了您正试图做的事情,但是如果您有一个作为节点列表的林,您就不能读取它并构建树结构,然后将其作为所有树的第一次遍历写入吗?有什么特别的理由避免这样做吗?

奥利弗,如果我理解正确的话,我想你也可以 (a) 将数据库中的所有元组检索到字典或列表中,然后构造树, 或 (b) 检索元组时请使用ORDERBY子句,以便元组的顺序与将元组添加到树中的顺序一致

如果对树的更改可能在应用程序中进行,然后传播到数据库,我会选择a,但如果更改总是作为数据库插入、更新或删除进行,并且除此之外,您的树是只读的,那么选项b应该更快,所需资源更少


罗兰

什么样的树?到目前为止你试过什么。。。为什么不使用当前的实现呢?这是什么类型的实现?它是一个有多个根节点的不平衡树?我很困惑。基本上,我是从数据库里得到的。什么样的树是不能确定的,因为它更平衡或者类似的东西。它更像是一个文件系统树。你所说的当前实现是什么意思?这是一个父子关系列表,我想将其显示在树中或网页上的类似内容中。是的,本质上它是一个树森林。列表中的每个元组都是一个项,可以有另一个元组作为其父元组。你的图片模型正确。它类似于文件系统视图,这是我想要创建的。好的,那么您想如何对林进行排序呢?看起来您正在或多或少地进行预排序遍历,然后根据ID对根进行排序?如果是这样,我建议您考虑使用另一个表示,使它们更容易排序,例如,其键为节点ID的嵌套字典。如果你愿意的话,你可以将字典平铺成元组表示的列表。不,我想,我将不得不采用这种方法。我唯一想跳过的是可能出现的情况,在这种情况下,我有一个包含10000个元组(也称为数据库行)的列表,我将其放入字典基林中,并从中再次创建元组列表。