2012-03-02 5 views
4

클래스의 인스턴스를 graph-tool 그래프에 저장하고 싶습니다. 하나의 노드 당 하나의 오브젝트 (또는 그래프 도구가 호출하는 '정점')를 저장하려고합니다. 나는 정점 속성을 사용하려고 시도하고 있는데, 이는 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' 

, 내가 다시 그래프에서 특정 제목의 클래스 객체를 얻는 방법? 한 가지 방법은 graph.set_edge_filter(...)을 사용하여 버텍스 필터를 만들고이를 적용하는 것입니다. 원하는 모든 것을 하나의 객체로 돌려 놓는 것만 큼 비싼 작업으로 보입니다. IMO처럼 자체 객체 제목/정점 인덱스 매핑을 유지하고 싶지는 않습니다. 이것은 그래프의 작업 중 하나입니다.

여기에 근본적인 것이 없습니까? 속성 값에 액세스하기 위해

답변

4

, 당신은 당신이 원하는 것을 할 것입니다 당신이 즉 그 값을 설정하는 데 사용되는 동일한 구문,

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

를 사용합니다.

주어진 속성 값으로 정점을 얻고 싶다면 그래프에서 검색 할 수밖에 없습니다. 속성 값은 고유 할 필요는 없으므로 값싼 방식으로 역 매핑을 수행 할 방법이 없다는 것을 기억하십시오. 또한, 각 속성 맵에 대해 역 매핑이 필요할 것이고 이는 메모리가 많이 소요됩니다. 그러나 dict 개체를 사용하면 쉽게이 작업을 수행 할 수 있습니다.

관련 문제