获取networkx图python中邻居节点的属性

时间:2019-11-12 11:08:42

标签: python networkx

我想获取networkx图的相邻节点的属性。

<div> {{ joke?.value }} </div>

我想从节点10或30知道属性20,从节点20知道10的属性。

这就是我开始尝试的方法,但无法弄清楚。

import networkx as nx
G=nx.DiGraph()
G.add_node(10, time = '1PM')
G.add_node(20, time = '5PM')
G.add_node(30, time = '10PM')

G.add_edges_from([(10,20),(20,30)])

有没有办法做到这一点?感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您可以使用x在节点G.neighbors(x)的邻居上获得迭代器。例如,如果您想知道"time"的每个邻居的x参数,您可以简单地执行以下操作:

for neighbor in G.neighbors(x):
    print(G.nodes[neighbor]["time"])

由于您使用的是DiGraph,因此仅考虑传出边来获取邻居,即:

print(list(G.neighbors(10))) # [20]
print(list(G.neighbors(20))) # [30]
print(list(G.neighbors(30))) # []

相反,在Graph中,使用传入和传出边缘:

print(list(G.neighbors(10))) # [20]
print(list(G.neighbors(20))) # [10, 30]
print(list(G.neighbors(30))) # [20]

答案 1 :(得分:3)

您可以遍历DiGraph中的节点并获得predecessorssuccessors列表。

注意 G.neigbors 在您的情况下不起作用,因为该图是有向图,并且仅存储后继列表。

for node in G.nodes:
    try: print('Attribute of {0} from {1}: {2}'.format(node, list(G.predecessors(node))[0], G.node[node]['time']))
    except: pass
    try: print('Attribute of {0} from {1}: {2}'.format(node, list(G.successors(node))[0], G.node[node]['time']))
    except: pass
Attribute of 10 from 20: 1PM
Attribute of 20 from 10: 5PM
Attribute of 20 from 30: 5PM
Attribute of 30 from 20: 10PM