«
frozendict
»
Ever want to use a mapping as a key in a dict or an element in a set? Me too. Unfortunately, Python doesn't have a built-in mapping type that satisfies this requirement. Fortunately, it's simple to do it:
try:
frozenset
except NameError:
from sets import ImmutableSet as frozenset
class frozendict(dict):
__slots__ = ('_hash',)
def __hash__(self):
rval = getattr(self, '_hash', None)
if rval is None:
rval = self._hash = hash(frozenset(self.iteritems()))
return rval
This implementation is for consenting adults only. It's not actually immutable, so don't change it after you plan on needing it to be hashable.