我尝试的是这里:
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,我发现同时使用nodes[]
degree[,]
都会发生此问题
这是完整的错误消息:
> 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
答案 0 :(得分:1)
所以这里有几个问题。
首先,有一种比您正在做的更好的方法来创建字典。
实际上,它基本上已经内置了。G.degree
已经是一个类似dict的对象,因此G.degree[node]
的程度将为node
。
如果您真的希望将其作为命令,那么最好的方法可能就是
deg_dict = dict(G.degree)
现在让我们看看您遇到的错误。 G.nodes()
不是列表(它也很像字典)。因此,当您设置nodes=G.nodes()
时,nodes
不是列表。在这里nodes[0]
尝试返回节点0
的属性(如果您的节点没有任何属性,nodes[node]
将返回一个空字典)(这是有价值的)。但是(我相信)0
不是图形G
中的节点。这就是您的错误消息的含义。
此外,作为一般规则,如果您先做n=len(x)
,然后再做for i in range(n):
,则几乎总是真的想做for name in x:
,或者如果确实需要索引,则可以做for i, name in enumerate(x)
。
因此,如果您想使用自己的方法,
for i, node in nodes:
deg_dist[node] = degree[i]