2012-02-27 16 views
8

In un multigrafo ogni chiamata * add_edge (a, b, peso = 1) * si aggiunge un nuovo filo tra nodi un e b. Quando si crea il grafico, è possibile modificare questo peso quando a e b vengono trovati di nuovo. In questo momento faccio un controllo per scoprire se (a, b) o (b, a) sono collegati, quindi devo eliminare il bordo e aggiungere uno nuovo. Mi sembra che dovrei semplicemente essere in grado di aggiornare il peso.Modifica bordo attributi di multigrafo NetworkX

Nota: Ho bisogno multigrafi perché io uso diversi tipi di bordi tra i nodi (differenziati utilizzando chiave)

risposta

13

La documentazione Multigraph.add_edge indica che si dovrebbe usare l'argomento key per identificare in modo univoco i bordi in un multigrafo. Ecco un esempio:

>>> import networkx as nx 
>>> G = nx.MultiGraph() 
>>> G.add_edge(1, 2, key='xyz', weight=2) 
>>> G.add_edge(1, 2, key='abc', weight=1) 
>>> G.edges(data=True) 
[(1, 2, {'weight': 2}), (1, 2, {'weight': 1})] 

Ora, per aggiornare il bordo digitato da xyz, basta passare il parametro di nuovo:

>>> G.add_edge(1, 2, key='xyz', weight=7) 
>>> G.edges(data=True) 
[(1, 2, {'weight': 7}), (1, 2, {'weight': 1})] 

Per leggere il valore precedente, è possibile utilizzare get_edge_data come questo:

>>> G.get_edge_data(1, 2, key='xyz') 
{'weight': 7} 
+0

Grazie! come posso recuperare i bordi che corrispondono alla chiave? per conoscere il valore precedente di _weight_ per esempio. Devo scorrere tutti i bordi per controllare prima il tasto? – Vladtn

+1

@Vladtn risposta aggiornata per includere come farlo – jterrace

+1

Questo semplifica notevolmente il mio codice ... – Vladtn

Problemi correlati