Python 3如何将自定义类型的实例转换为dict键?

时间:2014-10-23 10:46:15

标签: python class python-3.x dictionary

如何在Python 3中将自定义类型的实例(即用户编写的类)转换为dict键?

考虑以下代码,其中一个类有一个变量,应该定义实例是否相似:

class MyClass:
    def __init__(self, x):
        self.x = x


d = {MyClass(1): 1}
assert d[MyClass(1)] == 1

断言失败,因为两个不同的MyClass实例不会解析为相同的dict键,即使它们是相似的。

1 个答案:

答案 0 :(得分:1)

要使自定义类型可用作dict键,必须定义__hash____eq__。我不知道这是否记录在案,我至少找不到任何定义,但我已经被非正式地告知了:

class MyClass:
    def __init__(self, x):
        self.x = x

    def __hash__(self):
        return hash(self.x)

    def __eq__(self, rhs):
        return rhs.x == self.x


d = {MyClass(1): 1}
assert d[MyClass(1)] == 1