Graph-Tool: как получить доступ к свойствам? - PullRequest
5 голосов
/ 02 марта 2012

Я хотел бы хранить экземпляры класса в графе graph-tool , по одному объекту на узел (или «вершину», как их называет 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, что является одной из задач графа.

Я что-то упускаю здесь из фундаментального?

1 Ответ

5 голосов
/ 09 апреля 2012

Чтобы получить доступ к значениям свойства, вы используете тот же синтаксис, который вы использовали для установки его значения, то есть

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

будет делать то, что вы хотите.

Если вы хотитеполучить вершины с заданным значением свойства, у вас нет выбора, кроме как искать его в графе.Помните, что значения свойств не обязательно должны быть уникальными, поэтому нет способа выполнить обратное сопоставление недорогим способом.Кроме того, для каждой карты свойств должно быть обратное отображение, которое было бы дорогостоящим с точки зрения памяти.Однако вы можете легко сделать это самостоятельно с помощью объекта dict.

...