graph-tool:如何访问属性?

ssc*_*ssc 5 python graph vertices 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
Run Code Online (Sandbox Code Playgroud)

现在我想读回我的类对象,例如迭代所有节点/顶点并打印它们的标题:

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'
Run Code Online (Sandbox Code Playgroud)

另外,如何从图形中获取具有特定标题的类对象?一种方法似乎是创建一个顶点过滤器使用graph.set_edge_filter(...)并应用它 - 这似乎是一个相当昂贵的操作,考虑到我想要的只是获得一个单个对象.我真的不想将我自己的对象标题/顶点索引映射维护为IMO,这是图的任务之一.

我错过了一些基本的东西吗?

Tia*_*oto 5

要访问属性值,请使用与设置其值相同的语法,即

    for vertex in graph.vertices():
        print vprop[vertex].title
Run Code Online (Sandbox Code Playgroud)

会做你想做的.

如果要获取具有给定属性值的顶点,则除了在图形中搜索它之外别无选择.请记住,属性值不需要是唯一的,因此无法以便宜的方式执行反向映射.此外,每个属性映射都需要反向映射,这在内存方面是昂贵的.但是,您可以使用dict对象轻松地自行完成此操作.