dict's as dict's key.

Arnaud Delobelle arnodel at googlemail.com
Wed Jan 13 14:24:09 EST 2010


Albert van der Horst <albert at spenarnc.xs4all.nl> writes:

> I have a type of objects that have complicated enough properties
> to warrant a special class for its type.
> The class has built in dictionary for all the properties.
>
> Something along the line of
> a = ctype({"poker":True})
> b = ctype({"footbal":True, "gender":"m"})
> c = ctype({"chess":True, "residence":"Amsterdam"})
> I can count each type, again using a dictionary:
> db = {}
> db[a]=171
> db[b]=208
>
> But now I am at a loss as how to look up a ctype z in this db
> dictionary efficiently, because all those objects are different
> from z.
>
> Is there a way to turn those ctype things into a hashable type?
> (I would then convert z in the same way.)
> Once a ctype is invented it never changes.
> The only data pertinent to a ctype is its property dictionary.
>

Something like this will work (untested):

class ctype(object):
      def __init__(self, propdict):
          self.propdict = propdict
          self._hash = hash(frozenset(propdict.items()))
      def __hash__(self):
          return self._hash
      def __eq__(self, other):
          return isinstance(other, ctype) and self.propdict == other.propdict

Note: you should capitalize your class names if you want to comply with
PEP 8.

HTH

-- 
Arnaud



More information about the Python-list mailing list