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

将含HuffmanTree的元组作为字典键报错:为何提示不可哈希?

为什么包含HuffmanTree实例的元组仍不能作为字典键?

元组的哈希特性完全依赖于它内部所有元素的哈希性——哪怕元组本身是不可变的,只要里面有一个元素不可哈希,整个元组就会变成不可哈希的,自然无法作为字典的键。

你遇到的问题本质不是元组的问题,而是HuffmanTree这个自定义类的实例本身不可哈希。Python中,自定义类默认的实例是可变的(属性可以被修改),而且默认没有实现符合要求的__hash__()和__eq__()方法,所以这类实例本身就不具备可哈希性,哪怕把它放进元组里,也没法改变这个核心问题。

解决办法

  1. 给HuffmanTree类实现哈希和相等判断方法
    只要确保类的实例是不可变的(比如属性初始化后不再修改),然后基于实例的唯一不可变标识实现__hash__()和__eq__():
    class HuffmanTree:
        def __init__(self, number):
            self.number = number  # 假设number是不可变类型,如整数
            # 其他自定义属性...
    
        def __eq__(self, other):
            if not isinstance(other, HuffmanTree):
                return False
            return self.number == other.number
    
        def __hash__(self):
            return hash(self.number)
    
  2. 直接用实例的不可变属性作为键
    既然你用到了huffman.number,可以直接把这个属性作为字典键,跳过实例本身:
    freq_dict[huffman.number] = huffman.number
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:17:40