networkx:通过循环访问具有多个节点属性的节点

时间:2019-01-28 17:36:59

标签: python-3.x networkx

我有一个具有节点/边的图。 我为节点分配了一些属性

 [(1, {'node_rx_signal': 0}),
 (2, {'node_rx_signal': 0}),
 (3, {'node_rx_signal': 1}),
 (4, {'node_rx_signal': 0}),
 (5, {'node_rx_signal': 1}),
 (6, {'node_rx_signal': 0}),
 (7, {'node_rx_signal': 0}),
 (8, {'node_rx_signal': 0})]

例如,它表示某些节点​​将此属性设置为0,而另一些则没有。 借助带有If条件的for循环,我想执行任务,但似乎无法使用'node_rx_signal' == 1访问节点。

nx.set_node_attributes(T1,values=0,name='node_rx_signal')
T1.nodes[3]['node_rx_signal'] = 1
T1.nodes[5]['node_rx_signal'] = 1  

for n, data in T1:
    if T1[n][data]==1:
        print(T1.node)
        print([n for n in T1.neighbors(n)])
    else:
        pass

遵循这些原则。

2 个答案:

答案 0 :(得分:1)

我猜大概是这样:

import networkx as nx

T1 = nx.Graph()
for i in range(1, 9):
    T1.add_node(i)

nx.set_node_attributes(T1, values=0, name='node_rx_signal')
nx.set_node_attributes(T1, values=0, name='node_visited')

T1.nodes[3]['node_rx_signal'] = 1
T1.nodes[5]['node_rx_signal'] = 1
T1.nodes[6]['node_visited'] = 1

for node, attr in T1.nodes(data=True):
    if attr['node_rx_signal'] == 1:
        print(node)
    if attr['node_visited'] == 1:
        print(node)

打印:

3
5
6

答案 1 :(得分:0)

所以您的问题已经有了答案,我真的要强调,发布之前,您应该始终通过Google搜索来查找!! looping through nodes and extract attributes in Networkx

在您的情况下,for循环调用nodes()方法将使您不会忘记data = True,如果您正在使用属性:

for my_node in T1.nodes(data=True):
     if my_node["node_rx_signal"] == 1:
          print(my_node)