问题描述
我一直在使用 NetworkX 处理多部分布局图。图形看起来像这样:
我图上的每个节点都有一个 '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 (将#修改为@)