如何在networkx2.1、python3中构建将节点映射到其级别的字典?
我尝试的是:如何在networkx2.1、python3中构建将节点映射到其级别的字典?,python,python-3.x,networkx,Python,Python 3.x,Networkx,我尝试的是: def comm_deg(G): nodes = G.nodes() A=nx.adj_matrix(G) deg_dict = {} n = len(nodes) degree= A.sum(axis = 1) for i in range(n): deg_dict[nodes[i]] = degree[i,0] return deg_dict 它显示KeyError:0,我发现使用节点[]度[],]都会出现此
def comm_deg(G):
nodes = G.nodes()
A=nx.adj_matrix(G)
deg_dict = {}
n = len(nodes)
degree= A.sum(axis = 1)
for i in range(n):
deg_dict[nodes[i]] = degree[i,0]
return deg_dict
它显示KeyError:0,我发现使用节点[]
度[],]
都会出现此问题
以下是完整的错误消息:
> File "/Users/shaoyupei/Desktop/code/untitled1.py", line 25, in comm_deg
> deg_dict[nodes[i]] = degrees[i,0]
> File "/anaconda3/lib/python3.6/site-packages/networkx/classes/reportviews.py", line 178, in __getitem__
> return self._nodes[n]
> KeyError: 0
所以这里有几个问题 首先,有一种比你现在做的更好的方法来创建dict。 事实上,它基本上已经内置了
G.degree
已经是类似dict的对象,因此G.degree[node]
将给出node
的度
如果你真的想让它成为一个dict,最好的方法可能是
deg_dict = dict(G.degree)
现在,让我们看看您得到的错误
G.nodes()
不是一个列表(它也是类似的东西)。因此,当您设置nodes=G.nodes()
,则节点
不是一个列表。此处nodes[0]
尝试返回node0
的属性(如果您的节点没有任何属性,那么nodes[node]
将返回一个空dict)。但是(我相信)0
不是图形G
中的节点。这就是错误消息的含义
另外,作为一般规则,如果您曾经对范围(n)中的i执行n=len(x)
,然后执行,,您几乎总是希望对x中的name执行:
,或者如果您确实需要索引,您可以对枚举(x)中的i,name执行
所以如果你想用你曾经用过的方法
for i, node in nodes:
deg_dist[node] = degree[i]
不应该是degree[i]@Serge我尝试degree[i][0]也可以。您可以给出完整的错误消息吗?另外,你能告诉我们你有什么版本的networkx(试试nx.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?你认为0
是什么意思?@Joel嗨,Joel,我已经更新了,我使用degree[I,0]
因为我发现degree是一个列向量,我的networkx是2.1