У меня есть: граф G, импортированный в узлах networkx whit и egdes, загружаемых gml-файлом.
Проблемы: Как добавить новый атрибут к выбранному краю E.
Что я хочу сделать: я хочу, чтобы добавить новый атрибут «типа» для конкретного ребра Е моего графика. Внимание: для этого ребра не существует атрибута 'type'.Добавить новый атрибут к краю в сетиx
Я прочитал много решений, предлагаемых в Интернете, и здесь, но ни одно из этих решений не решает мою проблему. На самом деле мой код:
G.edge[id_source][id_target]['type']= value
Но если я напечатать все ребра G, теперь у меня есть п + 1 ребер, все старые ребра G, и новый фронт р = (id_source, id_target, {'type' = значение}). Кроме того, старый край E (тот, который я хочу изменить) не имеет нового атрибута «type».
Так что мой код добавил новый край (который я не хочу).
Я хочу обновить старый, добавив новый атрибут, который не существует.
Благодарим за помощь!
EDIT: решаемые Благодаря Арик и некоторые трюки я решить мою проблему:
def add_attribute_to_edge(H,id_node_source,id_node_target,new_attr,value_attr):
keydict =H[id_node_source][id_node_target]
key=len(keydict)
for k in keydict:
if 'type' not in H.edge[id_source][id_target][k]:
H.add_edge(id_node_source,id_node_target,key=k, new_attr= value_attr)
Спасибо за ответ. Но в мультиграфическом примере, когда вы добавляете кромку, вы добавляете также цвет атрибута. Мне нужно добавить новый атрибут, который не существует, когда я создал ребро. Например, после строки 3, как я могу добавить второй атрибут к краю 1-2 ???? –
Конечно, просто напишите G.add_edge (1,2, other = 'foo'). Возможно, вы не захотите использовать 'type', так как это зарезервированное слово в Python (хотя, вероятно, будет полезно использовать это как). – Aric
Но я попробовал G.add_edge (1,2, other = 'foo'). Но он добавляет новый один край, отличный от первого края 1,2, цвет: красный). Я хочу Это: (1,2, цвет: красный, другое: foo). Как я могу получить этот результат? –