graph-tool:如何访问属性?

时间:2012-03-02 01:34:14

标签: python graph vertices graph-tool

我想在graph-tool图中存储一个类的实例,每个节点一个对象(或者作为graph-tool调用它们的'vertex')。我试图使用顶点属性,因为它似乎是way to do this

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,这是图的任务之一。

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

1 个答案:

答案 0 :(得分:5)

为了访问属性值,您使用与设置其值相同的语法,即

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

会做你想做的事。

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