如此接近,但到目前为止。
我不确定发生了什么,但是为我工作的生成器脚本突然开始抛出KeyErrors。我根据我给每个节点的类别为networkx节点分配属性。
每个节点都是这样......
539943797.0: {'category': 'perimeter'}
我用这样的变量定义尺寸......
node_sizes = {'core':500, 'perimeter':50}
并且实际节点绘制代码如下所示,生成器就位......
nx.draw_networkx_nodes(G, graph_pos,
node_size=[node_sizes[G.node[node]['category']]for node in G],
alpha=node_alpha,
node_color=[node_colors[G.node[node]['category']]for node in G])
问题是,上面的生成器代码(不久前工作)在运行时给了我一个KeyError:'category'错误。
然而,这称呼......
node_sizes[G.node[539943797.0]['category']]
正如我所料,让我获得50的价值;将类别从539943797.0拉为“周长”,其大小为50.到目前为止一切顺利。我不确定我在这里做错了什么。我希望另外几套眼睛可以给我一个更好的主意。
我怀疑我在调用类别或设置类别方面做错了什么
(我在这里设置了......)
for node in graph[1]:
G.add_node(node)
G.node[node]['category'] = 'perimeter'
如果我需要提供更多的代码以便更好地理解,我会尝试修改并将其放在这里。希望我提供的足够。
感谢,
答案 0 :(得分:0)
在评论中,您说这是在您开始添加边缘后开始发生的。我认为这就是问题所在。即使一个节点没有定义'category'
,您也会收到此错误。我认为添加边缘会导致添加一些没有定义category
的节点。第一个测试是通过
for node in G.nodes():
if not G.node[node].has_key('category'):
print node
在您收到错误之前。 我打赌你会发现你的大多数节点都没问题,但有些节点还没有。
如果我有代码
import networkx as nx
G=nx.Graph()
G.add_node(1)
G.node[1]['category'] = 'perimeter'
for node in G.nodes():
if not G.node[node].has_key('category'):
print node
我没有输出。所有(1)个节点都定义了'category'
。
但是,如果我再尝试
G.add_edge(1,2)
for node in G.nodes():
if not G.node[node].has_key('category'):
print node
输出
2
这是因为当我添加边缘时,networkx还看到了G
中没有的节点。它假设您也想添加节点。现在您已经添加了一个新节点2
,但它并不知道它应该定义'category'
。所以它没有。
从你所描述的内容来看,这几乎肯定是正在发生的事情。要检查这一点,在添加任何边之前,您可以检查两个节点是否已在图中。或者,如果您的代码一次添加了大量边,只需检查G.order()
之前和之后是否相同。一旦你弄清楚它为什么这样做,大概你可以决定你想用这些节点做什么。
如果这没有找到问题,那么您需要发布更多代码,以便我们能够重现您的错误。