From the python documentation:
A dictionary’s keys are almost
arbitrary values. Values that are not
hashable, that is, values containing
lists, dictionaries or other mutable
types (that are compared by value
rather than by object identity) may
not be used as keys.
Hashable is defined as follows
An object is hashable if it has a hash
value which never changes during its
lifetime (it needs a__hash__()
method), and can be compared to other
objects (it needs an__eq__()or
__cmp__()method). Hashable objects which compare equal must have the same
hash value.Hashability makes an object usable as
a dictionary key and a set member,
because these data structures use the
hash value internally.
So if you want to do this, you need to override the default __hash__() method on your object (see the comment from Steven Rumbalski below for further explanation).
>>> content_type in package_disseminators.keys()
True
I suppose this works because dict.keys() returns a list, and __contains__ probably checks for equality, but not for the same hashes.