我一直在用NetworkX制作一个多部分布局图。该图如下所示:
我的图形上的每个节点都有一个'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)
返回一个我可以保存的字典
目前没有回答
相关问题 更多 >
编程相关推荐