我想在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,这是图的任务之一。
我错过了一些基本的东西吗?
答案 0 :(得分:5)
为了访问属性值,您使用与设置其值相同的语法,即
for vertex in graph.vertices():
print vprop[vertex].title
会做你想做的事。
如果要获取具有给定属性值的顶点,则除了在图形中搜索它之外别无选择。请记住,属性值不需要是唯一的,因此无法以便宜的方式执行反向映射。此外,每个属性映射都需要反向映射,这在内存方面是昂贵的。但是,您可以使用dict
对象轻松自行完成此操作。