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