xyz*_*zen 2 python graph networkx
所以我使用networkX图来表示一些信息.此信息由不同的对象类型表示(例如,ColorNode和ShapeNode).
在此图上完成的一些处理要求我提取出特定类型的节点.每次我需要这样做时,我都会按照下面的代码行事.
colornodes = []
for node in graph.nodes():
if isinstance(node, ColorNode):
colornodes.append()
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但我觉得这种情况经常在使用图表时出现,我正在那里重新发明轮子.基本上,我想知道是否有更好的方法来做到这一点.
isinstance我建议采用另一种方法,而不是定义自己的类型并始终检查(这很慢).
您可以查看经典节点/边缘过滤的答案.
但是我发现了另一个可能对你的具体情况有用的技巧.
如果定义表示节点类型的属性,则可以使用builtin get_node_attributes函数查询具有该特定属性的节点.诀窍是它只返回真正定义属性的节点:
import networkx as nx
G = nx.complete_graph(10)
G.node[0]['ColorNode'] = True # right-hand side value is irrelevant for the lookup
G.node[1]['ColorNode'] = True
G.node[2]['ShapeNode'] = True
G.node[3]['ShapeNode'] = True
shape_nodes = nx.get_node_attributes(G, 'ShapeNode').keys()
color_nodes = nx.get_node_attributes(G, 'ColorNode').keys()
print('Shape node ids: {}'.format(shape_nodes))
print('Color node ids: {}'.format(color_nodes))
Run Code Online (Sandbox Code Playgroud)
输出:
Shape node ids: [2, 3]
Color node ids: [0, 1]
Run Code Online (Sandbox Code Playgroud)
当然,如果您的图表很大或是静态的,您应该保留id列表以便快速查询!