Python 无法理解networkx中dfs_树的结果?

Python 无法理解networkx中dfs_树的结果?,python,networkx,Python,Networkx,我已经创建了一个图,我想验证所有的子树(目的是可视化层次结构),但是有一个错误,而且每个节点的结果都是相同的,而我知道,例如,节点1有一个子树,节点10没有子树: > G = nx.from_pandas_dataframe(db, 'name1','name2','weight',nx.Graph()) `enter code here`nodes = G.nodes() edges= G.edges() > node_and_degree=G.degree

我已经创建了一个图,我想验证所有的子树(目的是可视化层次结构),但是有一个错误,而且每个节点的结果都是相同的,而我知道,例如,节点1有一个子树,节点10没有子树:

>      G = nx.from_pandas_dataframe(db, 'name1','name2','weight',nx.Graph()) 
`enter code here`nodes       = G.nodes() edges= G.edges()
> node_and_degree=G.degree()
> 
> d=dict(zip(G.nodes(),G.edges()))
> 
> degree=list(zip(G.nodes(),G.degree().values())) degree_sort=
> sorted(degree,key=itemgetter(1), reverse=True)  


inner_nodes1 = [ n for n in nodes if G.degree(n) >=200 ] 
inner_nodes2 = [ n for n in nodes if (100<= G.degree(n)  <200) ] 
inner_nodes3 = [ n for n in nodes if (50<= G.degree(n)  <100) ] 
inner_nodes4 = [ n for n in nodes if (20<= G.degree(n)  <50) ]
inner_nodes5 = [ n for n in nodes if (10<= G.degree(n)  <20) ] 
inner_nodes6=  [ n for n in nodes if (2<= G.degree(n)  <10) ]  
leaves      = set( n for n in nodes if  G.degree(n) == 1 )
inner_nodes = [ n for n in nodes if G.degree(n) >1 ]

> from collections import defaultdict from
> networkx.algorithms.traversal.depth_first_search import dfs_tree
> 
> for i in range(len(inner_nodes)):
> 
>     print( dfs_tree(G,i))
> 
> --------------------------------------------------------------------------- KeyError                                  Traceback (most recent call
> last) <ipython-input-25-4494433c2afc> in <module>()
>       4 for i in range(len(inner_nodes)):
>       5 
> ----> 6     print( dfs_tree(G,i))
>       7 
> 
> C:\ProgramData\Anaconda3\lib\site-packages\networkx\algorithms\traversal\depth_first_search.py
> in dfs_tree(G, source)
>      99     else:
>     100         T.add_node(source)
> --> 101     T.add_edges_from(dfs_edges(G,source))
>     102     return T
>     103 
> 
> C:\ProgramData\Anaconda3\lib\site-packages\networkx\classes\digraph.py
> in add_edges_from(self, ebunch, attr_dict, **attr)
>     633                     "The attr_dict argument must be a dict.")
>     634         # process ebunch
> --> 635         for e in ebunch:
>     636             ne = len(e)
>     637             if ne==3:
> 
> C:\ProgramData\Anaconda3\lib\site-packages\networkx\algorithms\traversal\depth_first_search.py
> in dfs_edges(G, source)
>      59             continue
>      60         visited.add(start)
> ---> 61         stack = [(start,iter(G[start]))]
>      62         while stack:
>      63             parent,children = stack[-1]
> 
> C:\ProgramData\Anaconda3\lib\site-packages\networkx\classes\graph.py
> in __getitem__(self, n)
>     405         {1: {}}
>     406         """
> --> 407         return self.adj[n]
>     408 
>     409     def add_node(self, n, attr_dict=None, **attr):
> 
> KeyError: 0
> 
> len(list(dfs_tree(G,'1')))
 1000 

len(list(dfs_tree(G,'10')))

 1000
>G=nx.from_pandas_数据帧(db,'name1','name2','weight',nx.Graph())
`在此处输入代码`nodes=G.nodes()edges=G.edges()
>节点_和_度=G.度()
> 
>d=dict(zip(G.nodes(),G.edges())
> 
>度=列表(zip(G.nodes(),G.degree().values())度\u排序=
>排序(度,键=itemgetter(1),反向=真)
内部节点1=[n表示节点中的n,如果G.degree(n)>=200]
如果()
>4对于范围内的i(len(内部节点)):
>       5 
>--->6打印(dfs_树(G,i))
>       7 
> 
>C:\ProgramData\Anaconda3\lib\site packages\networkx\algorithms\traversal\depth\u first\u search.py
>在dfs_树中(G,源)
>99其他:
>100 T.add_节点(源)
>-->101 T.从(dfs_边(G,源))添加_边
>102返回T
>     103 
> 
>C:\ProgramData\Anaconda3\lib\site packages\networkx\classes\digraph.py
>从中添加边(self、ebunch、attr\u dict、**attr)
>633“attr_dict参数必须是dict.”)
>634#进程ebunch
>-->635适用于电子束中的e:
>636 ne=len(e)
>637如果ne==3:
> 
>C:\ProgramData\Anaconda3\lib\site packages\networkx\algorithms\traversal\depth\u first\u search.py
>在dfs_边中(G,源)
>59继续
>60.添加(开始)
>--->61堆栈=[(开始,国际热核实验堆(G[start]))]
>62当堆栈:
>63父级,子级=堆栈[-1]
> 
>C:\ProgramData\Anaconda3\lib\site packages\networkx\classes\graph.py
>在uuu getitem中(self,n)
>     405         {1: {}}
>     406         """
>-->407返回自调整[n]
>     408 
>409 def add_节点(self,n,attr_dict=None,**attr):
> 
>关键错误:0
> 
>len(列表(dfs_树(G,'1'))
1000
len(列表(dfs_树(G,'10'))
1000
我无法理解结果,可能是我走错了路,请提供任何帮助或评论!

因为我在范围内(len(内部节点))
导致第一个
I
0
。错误消息说
G
没有节点
0

对于具有相同大小树的10和1:


如果您的图是无向图,则深度优先搜索将找到包含节点的整个组件。它不知道您希望它找到子树,因为无向图中不存在该概念。因此,如果1和10在同一棵树中,它将给出相同的节点集(但顺序不同).

如何打印每个节点索引的子树?
dfs_树(G,节点索引)
,因为我有1000个节点。我想打印每个节点或图中更重要节点的所有子树。我创建了一个有向图,现在我有10个内部节点子树,有趣的是,对于叶子,我有11个子树,我希望叶子有0个子树!!