自定义类型的对象作为字典键

问题:

使用自定义类型的对象作为Python字典中的键(我不希望“对象ID”作为键),我该怎么办?

class MyThing:
    def __init__(self,name,location,length):
            self.name = name
            self.location = location
            self.length = length

我想使用MyThing作为键,如果名称和位置相同,则认为相同。
从C#/ Java我习惯了覆盖并提供一个equals和hashcode方法,并承诺不突变哈希码依赖的任何东西。
在Python中我该怎么做才能完成这个?我应该呢
(在一个简单的情况下,像这样,也许最好只是把一个(名称,位置)元组作为关键字 – 但是考虑我想要的键是一个对象)

回答:

您需要添加2 methods,注意__hash____eq__

class MyThing:
    def __init__(self,name,location,length):
        self.name = name
        self.location = location
        self.length = length

    def __hash__(self):
        return hash((self.name, self.location))

    def __eq__(self, other):
        return (self.name, self.location) == (other.name, other.location)

    def __ne__(self, other):
        # Not strictly necessary, but to avoid having both x==y and x!=y
        # True at the same time
        return not(self == other)

Python dict documentation定义了关键对象的这些要求,即它们必须是hashable

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Object of custom type as dictionary key

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

68 − 66 =