2012-01-10 13 views
0

"ID"フィールドと "名前"フィールドを持つテーブル "ノード"があります。また、ノードを多対多としてリンクするテーブル "リンク"もあります。Python。データベースから再帰的にグラフツリー

 
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 

このグラフ、リスト、またはディクテーションをネストして生成するにはどうすればよいですか? 私はアルゴリズムの構築に問題があります。私は関数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) 

Iがnode1を持っている:

c.tree = {ノード1:{}、NODE2:{}、ノード3:{}、ノード4:{}、NODE5:{ }、node6:{}、node7:{}} NODE2ため

c.tree = {NODE2:{}、ノード4:{}、ノード3:{}、NODE5:{}、node6。 {}、node7:{}}

しかし、私はdict {node2:{node4:{}、node3:{node7:{}、node5:{}、node6:{}}}}が必要です。

答えて

0

このexampleをpython-graphからご覧ください。

grahをプログラムで作成する方法、およびgraphvizを使用してプログラムを表示する方法を示します(Linuxディストリビューションを使用している場合は、システムにインストール済みである必要があります)。

0

dotとgraphvizを使用します。

ドットコードを生成するのに役立つライブラリがありますが、テキストをファイルにダンプするために簡単に書き込むことができます。