How to define a class that can act as dictionary key?

Christian Heimes lists at cheimes.de
Tue Sep 15 08:06:10 EDT 2009


Paul Rubin schrieb:
> Lambda <stephenhsu9 at gmail.com> writes:
>> When I run it, it says "TypeError: unhashable instance"
>>
>> It looks like I can't use the new class object as the dictionary key.
>> What should I do?
> 
> You have to add a __hash__ method.  Untested:
> 
>     def __hash__(self): return (self.term, self.doc_freq)
> 
> is probably the easiest.

The __hash__ function must return an integer:

>>> class Hash(object):
...     def __hash__(self):
...         return (1, 2)
...
>>> hash(Hash())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: an integer is required
>>> class Hash(object):
...     def __hash__(self):
...         return hash((1, 2))
...
>>> hash(Hash())
3713081631934410656


Christian




More information about the Python-list mailing list