如何在 NetworkX 中获取节点的子集?

问题描述

我一直在使用 NetworkX 处理多部分布局图。图形看起来像这样:

enter image description here

我图上的每个节点都有一个 'trajectory' 属性一个 'layer' 属性。层表示节点属于哪一列。

显示了前两列节点的示例:

[('0.0',{'layer': 0,'trajectory': 0}),('1.0','trajectory': 1}),('2.0','trajectory': 2}),('3.0','trajectory': 3}),('4.0','trajectory': 4}),('5.0','trajectory': 5}),('6.0','trajectory': 6}),('7.0','trajectory': 7}),('8.0','trajectory': 8}),('9.0','trajectory': 9}),('10.0','trajectory': 10}),('11.0','trajectory': 11}),('12.0','trajectory': 12}),('13.0','trajectory': 13}),('14.0','trajectory': 14}),('0.1',{'layer': 1,('1.1',('2.1',('3.1',('4.1',('5.1',('6.1',('7.1',('8.1',('9.1',('10.1',('11.1',('12.1',('13.1',('14.1',('15.1','trajectory': '15'})]

我需要检索特定列中的所有节点。如果我选择第二列然后访问它,我可以这样做:

column = 2
for nodename,nodeattrs in G.nodes(data=True):
    if nodeattrs['layer'] == column:
        print('I am a node in the column: ' + str(column))
        # I do more stuff here

我认为这不是解决我的问题的非常有效或优雅的方法,因为我必须检查图中的每个节点。我的图表将有数千列,这让我相信必须有一种方法可以获得我想要的节点子集,而不必检查每个节点是否具有指定的层。

有没有更好的方法来实现这一点?

编辑:我在这里找到了我的问题的答案:

Select nodes and edges form networkx graph with attributes

在我的情况下,应该是这样的:

dict( (n,d['layer']) for n,d in G.nodes().items() if d['layer'] == 2)

返回一本我可以保存的字典。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)