5

ノードごとに1つのオブジェクト(またはグラフツールが呼び出す「頂点」)で、クラスのインスタンスをグラフツールグラフに保存したいと思います。これを行う方法のように見えるので、頂点プロパティを使用しようとしています。

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 つのオブジェクトを取得することだけを考えると、かなり高価な操作のようです。グラフのタスクの 1 つである、IMO として独自のオブジェクト タイトル/頂点インデックス マッピングを維持したくありません。

ここで基本的な何かが欠けていますか?

4

1 に答える 1

5

プロパティ値にアクセスするには、値を設定するために使用したのと同じ構文を使用します。

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

あなたが望むことをします。

特定のプロパティ値を持つ頂点を取得する場合は、グラフで検索する以外に選択肢はありません。プロパティ値は一意である必要はないため、安価な方法で逆マッピングを実行する方法はありません。さらに、プロパティマップごとに逆マッピングが必要になり、メモリ的にコストがかかります。ただし、これはオブジェクトを使用して自分で簡単に行うことができdictます。

于 2012-04-09T13:02:44.153 に答える