【问题标题】:Networkx unhashable type: 'dict'Networkx 不可散列类型:'dict'
【发布时间】:2025-12-13 06:35:01
【问题描述】:

我在尝试分配邻居时收到错误 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'

我该如何解决这个问题? 谢谢。

【问题讨论】:

  • 总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是截图,不是链接到外部门户)有问题(不是评论)。还有其他有用的信息。
  • 也许先用print()看看你在变量中有什么。
  • 当我运行它时,pos 是空字典。你期望在pos 中得到什么?也许您应该使用if/else 来检查pos 并跳过graphs.neighbors(pos) - if pos: neighbors = graphs.neighbors(pos) else: neighbors = []

标签: python function dictionary networkx


【解决方案1】:

我不熟悉networkx NodeDataView 对象(您的graphs.nodes())的所有复杂性,但the documentation 中的注释和示例建议简单地转换为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 which specifies node coordinates for plotting in networkx,最好使用另一个变量名来防止混淆。

【讨论】: