2014-10-30 3 views
0

Я создаю граф с вершинами и ребрами, используя networkx в python.Получить вершину графа на основе значений и атрибутов

G=add_edge(vertex1,vertex2) 

vertex1 и vertex2 являются целыми числами, т.е.

G=add_edge(4,3), 
G=add_edge(2,3) 
etc.. 

Так, в питоне, если мы просто дать список краев, он создает вершину и создать ребра между указанными вершинами.

Теперь мне нужно добавить атрибут в вершины графа, т. Е. Я хочу в основном отделить вершины от групп на основе атрибута.

Таким образом, я могу сделать

G.node[your_vertex]['attribute'] = value 

добавить атрибут в уже созданный граф G.

Поскольку может быть много различных атрибутов и различные значения, как я получить вершину

  1. По своему значению
  2. По атрибуте

ответ

1

Вы могли бы просто цикл по узлам и см. какие:

  1. имеют некоторое значение для атрибута (то есть атрибут является ключом в словарь атрибутов); или
  2. имеют особое значение, которое вы желаете для атрибута.

 

>>> import networkx as nx 
>>> G = nx.Graph() 
>>> G.add_edge(4, 3) 
>>> G.add_edge(2, 3) 
>>> G.add_edge(2, 5) 
>>> G.node[2]['foo'] = 'bar' 
>>> G.node[3]['foo'] = 'qux' 
>>> attribute = 'foo' # the attribute you want 
>>> value = 'bar' # the value you want for that attribute 
>>> [n for n in G.node if attribute in G.node[n].keys()] 
[2, 3] 
>>> [n for n in G.node if G.node[n].get(attribute) == value] 
[2] 

Если вам нужно сделать много этих поиски, это, вероятно, не очень быстро - вы можете рассмотреть вопрос о строительстве какого-то индекс узлов, имеющих атрибуты/которые вас интересуют, предполагая, что атрибуты/значения узла не изменяются очень часто.

Смежные вопросы