python - 如何构建一个字典,将节点映射到networkx2.1,python3中的程度?
问题描述
我尝试的是在这里:
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
解决方案
所以这里有几个问题。
首先,有一种比你正在做的更好的方法来创建一个 dict。事实上,它基本上已经内置了。 G.degree
已经是一个类似字典的对象,所以这G.degree[node]
将给出node
.
如果您真的希望它成为一个字典,那么最好的方法可能是
deg_dict = dict(G.degree)
现在让我们看看你得到的错误。 G.nodes()
不是一个列表(它也是类似 dict 的东西)。所以当你设置nodes=G.nodes()
, thennodes
不是一个列表。在这里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]
推荐阅读
- c# - 将“所有者”身份传递给相关模型的创建视图
- html - 如何在css中更改GIF动画图像的颜色
- gradle - Gradle / IntelliJ IDEA:sourceCompatibility 恢复到 IDE 设置中的先前值
- selenium - 无法使用 [class java.lang.String, class java.lang.String] 注入 @Test 注释方法 [Entertheuapp]
- python - 如何在python中解析非常大的文件?
- android - 如何使用改造处理android中的动态错误响应?
- javascript - 自定义正则表达式以格式化数字
- android - Admob 本机高级广告在回收站视图中重复
- javascript - 在 Chrome 的 javascript 中使用 iframe 来欺骗音频自动播放
- node.js - pm2 脚本执行路径不正确,与生态系统.config.js 中的不匹配