2016-03-06 2 views
0

Когда я пытаюсь использовать set_edge_attributes в NetworkX присвоить целое значение нового атрибута для всех edeges (есть неориентированный NetworkX G уже):получить ошибки при использовании «set_edge_attributes»

nx.set_edge_attributes(G, 'new_attr', 1) 

показывает ошибку

AttributeError: 'int' object has no attribute 'items'

Но так как по https://networkx.github.io/documentation/latest/reference/generated/networkx.classes.function.set_edge_attributes.html:

If values is not a dictionary, then it is treated as a single attribute value that is then applied to every edge in G.

Так оно и должно быть в порядке установить одинаковое целочисленное значение для каждого ребра в графе? Или я не могу «создать» новый атрибут и использовать существующий атрибут?

Update: кажется, что я могу использовать

G.edge[u][v]['new_attr'] 

для создания и доступа к атрибуту. Но есть ли более простой способ присвоить значение сразу без использования цикла? Мне нужно инициализировать сеть с тем же начальным значением для атрибута.

ответ

0

Это правильная идея. Например

In [1]: import networkx as nx 

In [2]: G = nx.path_graph(4) 

In [3]: nx.set_edge_attributes(G,'foo',1) 

In [4]: list(G.edges(data=True)) 
Out[4]: [(0, 1, {'foo': 1}), (1, 2, {'foo': 1}), (2, 3, {'foo': 1})] 

Возможно, ваш график G поврежден? Отправьте полный пример, если вам нужна дополнительная помощь.

+0

Спасибо! Он работает нормально. Я не знаю, почему вчера это не сработало. – Jingjin

+0

Btw, я понял, что на моем другом компьютере с версией 2.7.3 python это сообщение об ошибке все еще появляется. В таком случае мне нужно сначала обновить свой python? – Jingjin

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