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

Python调用get_weight获取图顶点权重出现KeyError如何解决

问题原因

Python 中自定义类的实例作为字典键时,默认会以实例的内存地址作为哈希值、相等判断的依据:

  • 你调用Vertex(2)时生成的是全新的独立实例,和图中已经存在的id为2的顶点实例内存地址完全不同,因此adjacent字典会认为这是两个完全不同的键,自然找不到对应值抛出KeyError。
  • for循环中遍历得到的key本身就是adjacent字典里存储的旧实例,内存地址完全匹配,因此可以正常查询。

解决方案

方案1:直接复用图中已有的顶点实例(推荐)

不需要修改类定义,直接从图的顶点字典中获取已经存在的id为2的顶点实例来查询即可,将报错行替换为:

test.final.vert_dict[1].get_weight(test.final.vert_dict[2])

也可以调用你写好的get_vertex方法获取:

test.final.vert_dict[1].get_weight(test.final.get_vertex(2))

方案2:重写Vertex类的相等判断和哈希方法

如果你希望只要顶点id相同就视为同一个键,可以给Vertex类新增__eq__和__hash__方法:

class Vertex:
  def __init__(self, node):
    self.id = node
    self.adjacent = {}

  # 原有方法保留,新增以下两个方法
  def __eq__(self, other):
    if not isinstance(other, Vertex):
        return False
    return self.id == other.id
  
  def __hash__(self):
    return hash(self.id)

  # 剩余原有方法不变

修改完成后你原来的test.final.vert_dict[1].get_weight(Vertex(2))写法就可以正常运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:54:05