You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Networkx获取节点邻居时报错unhashable type: 'dict'如何解决

问题诱发原因

该报错核心原因是传入graph.neighbors()方法的参数为不可哈希的字典类型:
networkx的邻接表底层用字典存储,查询邻居时需要传入可哈希的节点ID作为键。你代码里通过random.choice(graphs.nodes())拿到的pos不是合法的节点ID,而是节点属性字典,字典属于不可哈希类型,触发了类型错误。
之所以从graphs.nodes()里取到字典,是因为networkx 2.x及以上版本中,graph.nodes()返回的是NodeView动态视图对象,不是普通列表:如果你的代码此前给节点设置过自定义属性,或者在部分版本实现中,直接迭代NodeView可能会返回包含属性字典的结构,导致随机选到的内容不是纯节点ID。

解决方案

以下两种方案都可以解决该问题:

  • 显式指定只取节点ID并转为列表再随机选择
    将取节点的代码修改为:
    # data=False 强制返回纯节点ID,转成list规避NodeView的动态特性
    pos = random.choice(list(graphs.nodes(data=False)))
    
  • 如果你用的networkx版本默认nodes()返回纯ID,只需要显式转list即可:
    pos = random.choice(list(graphs.nodes()))
    

修改后完整可运行代码示例:

import networkx
import random

graphs = networkx.erdos_renyi_graph(10, 0.5)
pos = random.choice(list(graphs.nodes(data=False)))
neighbors = graphs.neighbors(pos)
# 可以打印验证邻居
print(list(neighbors))

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:36:03