получить ошибки при использовании set_edge_attributes

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

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

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

AttributeError: объект «int» не имеет атрибута «элементы»

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

Если values ​​не является словарем, то оно рассматривается как одно значение атрибута, которое затем применяется к каждому ребру в G.

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

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

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

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


person Jingjin    schedule 06.03.2016    source источник


Ответы (1)


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

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 поврежден? Разместите полный пример, если вам нужна дополнительная помощь.

person Aric    schedule 06.03.2016
comment
Спасибо! Это работает нормально. Я не знаю, почему это не сработало вчера. - person Jingjin; 06.03.2016
comment
Кстати, я понял, что на другом моем компьютере с Python версии 2.7.3 это сообщение об ошибке все еще появляется. В таком случае мне нужно сначала обновить мой python? - person Jingjin; 11.03.2016
comment
Обратите внимание, что порядок вызова аргументов values и name менялся между v1.x и v2.x. документы - person rlchqrd; 14.09.2020