NetworkX (Python): how to change edges' weight by designated rule
Question: I have a weighted graph:

    
    
    F=nx.path_graph(10)
    G=nx.Graph()
    for (u, v) in F.edges():
        G.add_edge(u,v,weight=1)
    

get the nodes list:

    
    
    [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]
    

I want to change each edge's weight by this rule:

remove one node, such as node 5, clearly, edge (4, 5) and (5, 6) will be
delete, and the weight of each edge will turn to:

{# these edges are nearby the deleted edge (4, 5) and (5, 6)

(3,4):'weight'=1.1,

(6,7):'weight'=1.1,

#these edges are nearby the edges above mentioned

(2,3):'weight'=1.2,

(7,8):'weight'=1.2,

#these edges are nearby the edges above mentioned

(1,2):'weight'=1.3,

(8,9):'weight'=1.3,

# this edge is nearby (1,2)

(0,1):'weight'=1.4}

How to write this algorithm?

PS: path_graph is just an example. I need a program suit any graph type.
Furthermore, the program need to be iterable, it means I can remove one node
from origin graph each time.

Regards


Answer: You can access the edge weight as G[u][v]['weight'] or by iterating over the
edge data. So you can e.g.

    
    
    In [1]: import networkx as nx
    
    In [2]: G=nx.DiGraph()
    
    In [3]: G.add_edge(1,2,weight=10)
    
    In [4]: G.add_edge(2,3,weight=20)
    
    In [5]: G[2][3]['weight']
    Out[5]: 20
    
    In [6]: G[2][3]['weight']=200
    
    In [7]: G[2][3]['weight']
    Out[7]: 200
    
    In [8]: G.edges(data=True)
    Out[8]: [(1, 2, {'weight': 10}), (2, 3, {'weight': 200})]
    
    In [9]: for u,v,d in G.edges(data=True):
       ...:     d['weight']+=7
       ...:     
       ...:     
    
    In [10]: G.edges(data=True)
    Out[10]: [(1, 2, {'weight': 17}), (2, 3, {'weight': 207})]
    

