在NodeView对象的节点上调用random.choice时会引发KeyError

时间:2018-09-07 07:18:29

标签: python

我试图从一组节点(G.nodes())中选择一个元素,但没有得到输出。而是得到错误。以下是详细信息。我正在使用Python 3.6

G为:

Out[36]: NodeView(('Delhi', 'Bangalore', 'Hyderabad', 'Ahmedabad', 'Chennai', 'Kolkatta', 'Surat', 'Pune', 'Jaipur'))

代码:

c1=random.choice(G.nodes())

Traceback (most recent call last):

  File "<ipython-input-43-8dfc19a66804>", line 1, in <module>
    c1=random.choice(G.nodes())

  File "C:\Users\prasa\Anaconda3\lib\random.py", line 259, in choice
    return seq[i]

  File "C:\Users\prasa\Anaconda3\lib\site-packages\networkx\classes\reportviews.py", line 178, in __getitem__
    return self._nodes[n]

KeyError: 5

1 个答案:

答案 0 :(得分:0)

显然您正在使用networkx。查看Graph的文档,我看到它说:

  

作为G.nodes或G.nodes()的图的NodeView。

     

可用作G.nodes 用于数据查找和类似集合的操作。

     

[...]

     

返回

     
     

NodeView    允许通过   节点以及节点属性字典查找并调用以获取   NodeDataView。 NodeDataView在(n, data)上进行迭代,并且没有   设置操作。 NodeView在n上进行迭代并包含set   操作。

但是random.choice需要一个序列而不是一个集合 /类似地图的对象。您只需调用list就可以得到一个序列:

random.choice(list(G.nodes()))

该错误是由于以下事实造成的:NodeView未被集合中节点的位置索引,因此random.choice生成随机索引时(根据存在的节点数)返回随机节点,失败的原因是KeyError