python - NetworkX中,如何获取包含节点数据的DFS树?

标签 python networkx depth-first-search

在一个有向图中,节点不仅有 ID,还有数据(属性字典),我想从给定的源节点开始获取 DFS 树,包括数据 的子节点。

但是,我注意到 nx.dfs_tree函数似乎返回一棵没有任何数据的树:

In [1]: import networkx as nx

In [2]: G = nx.DiGraph()

In [3]: G.add_nodes_from([(0, {'name': 'foo'}), (1, {'name': 'bar'}), (2, {'name
   ...: ': 'baz'})])

In [4]: G.add_edge(0, 1)

In [5]: G.add_edge(1, 2)

In [6]: T = nx.dfs_tree(G, 1)

In [7]: T.nodes[1]
Out[7]: {}

In [8]: T.nodes[2]
Out[8]: {}

In [9]: T.nodes
Out[9]: NodeView((1, 2))

In [10]: G.nodes[1]
Out[10]: {'name': 'bar'}

从上面的例子可以看出,T.nodes[1]是一个空字典,而G.nodes[1]包含的是最初传入的数据字典。

如何使 T.nodes[1] 和其他树节点包含与原始图相同的数据?

最佳答案

我最终使用 add_nodes_from 将数据从 G 复制到 T方法,更新现有属性:

In [31]: T.add_nodes_from((i, G.nodes[i]) for i in T.nodes)

In [32]: T.nodes[1]
Out[32]: {'name': 'bar'}

任何更优雅的解决方案将不胜感激。

关于python - NetworkX中,如何获取包含节点数据的DFS树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52597599/

相关文章:

python - 在 python 中使用//

python - 将变量传递到 WTForms 类

python - 如何使用节点删除顶级集团

python - 优于 LeetCode 的 'climbing stairs' pr*blem 的深度优先搜索解决方案

depth-first-search - DFS和回溯有什么区别

python - 删除每个字符串后出现的空行

python - 减少python winsound中的 “raindrop”声音

python - networkx 在左侧和右侧绘制单独的节点 - graphviz,python

python - 如何提取 skimage 骨架信息到 python 中的 NetworkX 节点和边以进行进一步的高级分析

algorithm - Skienna DFS 算法