Cosa ho: un grafico G importato in retex con nodi ed egdes caricati dal file gml.
Problema: Come aggiungere un nuovo attributo a un bordo selezionato E.
Quello che voglio fare: voglio aggiungere un nuovo attributo 'tipo' per un particolare bordo E del mio grafico. Attenzione: l'attributo 'tipo' non esiste per questo bordo E.Aggiungi un nuovo attributo a un bordo nella retex
Ho letto molte soluzioni proposte in Internet e qui, ma nessuna di queste soluzioni risolve il mio problema. In realtà il mio codice è:
G.edge[id_source][id_target]['type']= value
Ma se stampo tutti gli archi di G, ora ho n + 1 bordi, tutti i vecchi archi di G, e un nuovo bordo p = (id_source, id_target, {'tipo' = valore}). Inoltre, il vecchio bordo E (quello che voglio modificare) non ha il nuovo attributo 'tipo'.
Quindi il mio codice ha aggiunto un nuovo bordo (che non voglio).
Desidero aggiornare quello vecchio aggiungendo un nuovo attributo che non esiste.
Grazie per il vostro aiuto!
EDIT: RISOLTO Grazie a Aric e alcuni trucchi ho risolto il mio problema:
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)
Grazie per risposta. Ma nell'esempio multigrafo quando aggiungi il bordo aggiungi anche il colore dell'attributo. Ho bisogno di aggiungere un nuovo attributo che non esiste quando ho creato il bordo. Ad esempio, dopo la riga 3, come posso aggiungere un secondo attributo al bordo 1-2 ???? –
Certo, basta scrivere G.add_edge (1,2, other = 'foo'). Potresti non voler usare 'type' dato che è una parola riservata in Python (anche se probabilmente sarà OK da usare in questo modo). – Aric
Ma ho provato G.add_edge (1,2, other = 'foo'). Ma aggiunge un nuovo bordo diverso dal primo bordo 1,2, colore: rosso). Voglio questo: (1,2, colore: rosso, altro: foo). Come posso ottenere questo risultato? –