Python. 从数据库递归图树

0 投票
2 回答
1144 浏览
提问于 2025-04-17 09:54

我有一个叫做“Node”的表,里面有“id”和“name”这两个字段。同时,我还有一个叫做“Link”的表,它用来连接这些Node,形成多对多的关系。

Node
id | name
1    node1
2    node2
3    node3
4    node4
5    node5
6    node4
7    node5

Link 
id | node_id | node2_id
1        1           2
2        2           3
3        3           5
4        2           4
5        3           6
6        3           7

         node4   node7
          |       |
node1-->node2-->node3-->node6
                  |
                 node5

我想用Python来生成这个图形,或者说是一个包含嵌套的列表或字典。我在构建算法的时候遇到了问题。我有一个叫get_derrived的函数,它返回一个派生元素的列表。我的代码是:

    c.tree = {}
    def get_tree(node_id):
        for node in get_derrived(node_id):
            if not node in c.tree:
                c.tree[node] = {}
                get_tree(node.id)           
    get_tree(id)

总的来说,对于node1,我的结构是:

c.tree = {node1: {}, node2: {}, node3:{}, node4: {}, node5: {}, node6: {}, node7: {}}

对于node2,我的结构是:

c.tree = {node2: {}, node4: {}, node3: {}, node5: {}, node6: {}, node7: {}}

但是我需要的字典结构是这样的:{node2: {node4: {}, node3: {node7: {}, node5: {}, node6: {} }}}。

2 个回答

0

使用 dot 和 graphviz。

有一些库可以帮助你生成 dot 代码,但你也可以很简单地自己写代码,把文本输出到一个文件里。

0

请查看这个来自python-graph的示例

这个示例展示了如何通过编程的方式创建一个图形,并且如何使用graphviz来显示它(如果你使用的是任何Linux系统,这个工具应该已经安装好了)。

撰写回答