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

2024-09-30 02:27:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在用NetworkX制作一个多部分布局图。该图如下所示:

enter image description here

我的图形上的每个节点都有一个'trajectory'属性和一个'layer'属性。图层指示节点所属的列

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

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

返回一个我可以保存的字典


Tags: 方法innetworkx图层layer图形forif

热门问题