首页 > 解决方案 > Networkx 不可散列类型:'dict'

问题描述

尝试分配邻居时出现错误 unhashable type: 'dict'

graphs = networkx.erdos_renyi_graph(10, 0.5)
pos = random.choice(graphs.nodes())
neighbors = graphs.neighbors(pos)

TypeError       Traceback (most recent call last)
<ipython-input-97-f39c9dfc00ff> in <module>()
  1 graphs = networkx.erdos_renyi_graph(10, 0.5)
  2 pos = random.choice(graphs.nodes())
  ----->3 neighbors = graphs.neighbors(pos)

/usr/local/lib/python3.7/dist-packages/networkx/classes/graph.py 
in neighbors(self, n)
1251         
1252         try:
-> 1253             return iter(self._adj[n])
1254         except KeyError as e:
1255             raise NetworkXError(f"The node {n} is not in the 
graph.") from e
TypeError: unhashable type: 'dict'

我怎么解决这个问题?谢谢。

标签: pythonfunctiondictionarynetworkx

解决方案


我不熟悉 networkxNodeDataView对象(您的)的所有复杂性,但文档graphs.nodes()中的注释和示例建议简单地转换为 a以访问节点以进行序列类型操作。list

以下内容按预期对我有用,没有任何错误。

import networkx
import random

graphs = networkx.erdos_renyi_graph(10, 0.5)
pos = random.choice(list(graphs.nodes))
neighbors = graphs.neighbors(pos)

顺便说一句,由于变量名称pos具有另一个典型含义,即kwarg,它指定用于在 networkx 中绘制的节点坐标,因此最好使用另一个变量名称来防止混淆。


推荐阅读