2012-03-02 5 views
4

クラスのインスタンスをgraph-toolグラフに格納したいと思います。ノードごとに1つのオブジェクト(またはグラフツールから呼び出される '頂点')を格納します。私はway to do thisと思われる頂点プロパティを使用しようとしています。graph-tool:プロパティへのアクセス方法?

class MyClass(object): 
    def __init__(self, title): 
     self.title = title 

graph = Graph() 
my_obj = MyClass('some title') 

vertex = graph.add_vertex() 
vprop = graph.new_vertex_property('object') 
vprop[vertex] = my_obj 

ここで私のクラスオブジェクトを読み返したいと思います。すべてのノード/頂点を反復処理し、そのタイトルを印刷:

for vertex in self.graph.vertices(): 
    # TODO: how to access titles ? this just prints 
    # "<Vertex object with index '0' at 0xb1e4bac>" 
    print repr(vertex) + '\n' 

また、どのように私は戻って、グラフから特定のタイトルを持つクラスオブジェクトを得るのですか? 1つの方法は、graph.set_edge_filter(...)を使用して頂点フィルタを作成し、それを適用することです - 私が望むすべてを考えれば、かなり高価な操作のように見えますが、1つのオブジェクトを元に戻すことです。私は本当に自分のオブジェクトタイトル/頂点インデックスマッピングをIMOとして維持したくないということです。それはグラフのタスクの1つです。

ここでは何か基本的なものがありませんか?

答えて

4

プロパティの値にアクセスするために、あなたはすなわち、

for vertex in graph.vertices(): 
     print vprop[vertex].title 

はあなたがやりたいだろう、あなたはその値を設定するために使用したのと同じ構文を使用します。

与えられたプロパティ値を持つ頂点を取得したい場合は、グラフ内でそれを検索することはできません。プロパティ値は一意である必要はないので、安価な方法で逆マッピングを実行する方法はありません。さらに、プロパティマップごとに逆マッピングを行う必要があります。これは、メモリごとに高価になります。しかし、あなたはdictオブジェクトでこれを簡単に行うことができます。

関連する問題