low*_*nly 12 graph networkx python-3.x
我正在寻找一种简单的方法来修改 NetworkX 图表内单个节点的单个属性的值。
NetworkX 文档仅提到了为图中所有节点设置属性的函数,例如:
nx.set_node_attributes(G, bb, 'betweenness')
Run Code Online (Sandbox Code Playgroud)
这在许多情况下可能是合适的,在这些情况下,这样的属性很容易为图中的所有节点计算(例如提到的介数)。同样,有一种简单的方法可以访问 NetworkX 中的单节点属性:
graph.nodes[nodeName][attribute]
Run Code Online (Sandbox Code Playgroud)
但是,以这种方式访问的属性是只读的。
所以我正在寻找一种像阅读一样简单的设置属性的方法。
提前致谢。
Joe*_*oel 11
在您的示例中,bb
是一个字典,其键是节点。您不需要字典拥有图中所有节点的键,只需拥有要为其定义属性的节点即可。在下面的示例中,我创建了一个图,然后将'weight'
of 节点设置0
为 be 5
,将 of 节点设置3
为 be 2
。这使得其他节点的属性不受影响,因此由于它们从未被创建,因此它们不存在。
import networkx as nx
G = nx.fast_gnp_random_graph(10,0.2)
nx.set_node_attributes(G, {0:5, 3:2}, 'weight')
G.nodes[0]['weight']
> 5
G.nodes[3]['weight']
> 2
G.nodes[1]['weight']
> KeyError: 'weight'
Run Code Online (Sandbox Code Playgroud)
因此,我们为0
和设定权重3
,但不为其他任何一个设定权重。您还可以一次设置多个属性,但这需要稍微不同的调用。在这里我们有
nx.set_node_attributes(G, {1:{'weight':-1, 'volume':4}})
G.nodes[1]['weight']
> -1
G.nodes[1]['volume']
> 4
Run Code Online (Sandbox Code Playgroud)
只是为了看看属性在所有这些之后是什么样子:
G.nodes(data=True)
> NodeDataView({0: {'weight': 5}, 1: {'weight': -1, 'volume': 4}, 2: {}, 3: {'weight': 2}, 4: {}, 5: {}, 6: {}, 7: {}, 8: {}, 9: {}})
Run Code Online (Sandbox Code Playgroud)