NetworkX add\u nodes\u from未按预期工作

2024-06-29 01:02:06 发布

您现在位置:Python中文网/ 问答频道 /正文

>>> import networkx as nx
>>> g = nx.Graph()
>>> g.add_nodes_from([1, 2, 3, 4, 5], carved=False)
>>> g[1]
{}
>>> nx.get_node_attributes(g, "carved")
{1: False, 2: False, 3: False, 4: False, 5: False}
>>>

当我键入'g[1]'时,我不应该得到“雕刻”属性吗? 以下工作:

^{pr2}$

我在这里遗漏了什么,为什么没有像第二个例子那样应用“carve”属性?我在Windows上运行python2.7。我更新了networkx的安装,以为我有一个旧版本?在

如有任何帮助,将不胜感激。在


Tags: fromimportnetworkxaddnodefalseget键入
2条回答

看起来您打算使用g.node[1]而不是{}。在

TL/DR:使用g.node[u]获取节点u的属性。g[u]完全是另外一回事。在


底层的数据结构是g基本上是一个字典。节点是g的键,如果1是{}的键,那么{}是一个字典,其键是节点{}的邻居。在

因此,在将节点放入g之后,您没有放入任何边。g[1]是空的这一事实反映了1没有邻居。一旦您通过设置g[1]["carved"] = True直接编辑底层数据结构,您将发现现在g.neighbors(1)['carved'],而{}现在有一条介于1和{}之间的边,并且该边具有属性True(来自{}。但是由于您直接编辑了数据结构,g.nodes()没有意识到{}已经被创建为一个节点。这显然不是你想要的。在

相反,使用g.node[u]获取节点u的属性,使用g.edge[u][v]获取从u到{}的任何边属性。在

相关问题 更多 >