Co mam: graf G importowany w networkx whit węzły i egdes załadowany przez plik gml.
Problem: Jak dodać nowy atrybut do wybranej krawędzi E.
Co chcę zrobić: Chcę dodać nowy atrybut „typ” dla danej krawędzi E mojego wykresu. Uwaga: atrybut "typ" nie istnieje dla tej krawędzi E.Dodaj nowy atrybut do krawędzi w siecix
Przeczytałem wiele rozwiązań proponowanych w Internecie i tutaj, ale żadne z tych rozwiązań nie rozwiązuje mojego problemu. W rzeczywistości mój kod to:
G.edge[id_source][id_target]['type']= value
ale jeśli wydrukować wszystkie krawędzie G, teraz mam n + 1 krawędzie, wszystkie stare krawędzie g, a nowa krawędź p = (id_source, id_target, {'typ' = wartość}). Ponadto stara krawędź E (ta, którą chcę zmodyfikować) nie ma nowego atrybutu "typ".
Więc mój kod dodał nową krawędź (której nie chcę).
Chcę aktualizować starego, dodając nowy atrybut, który nie istnieje.
Dziękuję za pomoc!
EDIT: SOLVED Dzięki Arie i kilka sztuczek i rozwiązać mój problem:
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)
Dzięki za odpowiedź. Ale w przypadku multigraph, kiedy dodajesz krawędź, dodajesz także kolor atrybutu. Potrzebuję dodać nowy atrybut, który nie istnieje, gdy utworzyłem krawędź. Na przykład po linii 3, w jaki sposób mogę dodać drugi atrybut do krawędzi 1-2 ???? –
Oczywiście po prostu napisz G.add_edge (1,2, inny = 'foo'). Możesz nie chcieć używać 'type', ponieważ jest to słowo zarezerwowane w Pythonie (chociaż prawdopodobnie będzie w porządku, aby użyć tego w ten sposób). – Aric
Ale próbowałem G.add_edge (1,2, inne = "foo"). Dodaje jednak nową krawędź inną przez pierwszą krawędź 1,2, kolor: czerwony). Chcę to: (1,2, kolor: czerwony, inny: foo). Jak mogę uzyskać ten wynik? –