Python 获取Networkx中特定类型的节点

Python 获取Networkx中特定类型的节点,python,graph,networkx,Python,Graph,Networkx,所以我用networkX图来表示一些信息。此信息由不同的对象类型(例如,ColorNode和ShapeNode)表示 在这个图上完成的一些处理需要我提取出特定类型的节点。每次我需要这样做时,我都会按照下面的代码行做一些事情 colornodes = [] for node in graph.nodes(): if isinstance(node, ColorNode): colornodes.append() 虽然这是可行的,但我觉得这是一种在处理图形时经常出现的情况,

所以我用networkX图来表示一些信息。此信息由不同的对象类型(例如,ColorNode和ShapeNode)表示

在这个图上完成的一些处理需要我提取出特定类型的节点。每次我需要这样做时,我都会按照下面的代码行做一些事情

colornodes = []
for node in graph.nodes():
    if isinstance(node, ColorNode):
        colornodes.append()
虽然这是可行的,但我觉得这是一种在处理图形时经常出现的情况,我正在重新发明轮子。
基本上,我想知道是否有更好的方法来实现这一点。

而不是
graph.nodes(),

您可以使用xpath。

而不是定义自己的类型,并始终使用
isinstance检查(速度非常慢),我建议另一种方法

您可以查看经典的节点/边过滤

然而,我发现了另一个技巧,它可能对您的具体案例有用

如果定义了表示节点类型的属性,则可以使用 内置的
get\u node\u 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))
输出:

Shape node ids: [2, 3]
Color node ids: [0, 1]

当然,如果您的图形是大的或静态的,您应该保留id列表以快速查询

很抱歉,这里可能遗漏了一些明显的内容,但是xpath是networkx的一部分吗?我似乎在networkx doucmentation中找不到任何与xpathyes相关的内容,比如图中的节点@sneha@sneha如果
graph
是networkx图形,则
graph.xpath
是未定义的。例如:def edges():对于root.xpath('//n:node',namespace={n':root.nsmap[无]}):node.xpath('./n:children/n:nodeRef/@rid',namespaces={'n':root.nsmap[None]})中的边的node_id=int(node.attrib['id']):加油,这是一个非常好的主意@乔尔,谢谢你指出这一点。若我点击“那个解决了我的问题”,其他人还会看到这个问题吗?提问主要是因为Kikohs答案中的替代方法非常有价值,我不想失去它。是的,它看起来是这样的:这个问题和它的答案将保留下来,指向另一个页面的链接将突出显示(另一个页面的侧边栏上有指向该页面的链接)。