我试图从一组节点(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
答案 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
。