Set of Dictionary

Raymond Hettinger python at rcn.com
Sat Jun 18 11:54:04 EDT 2005


[Vibha]
> I know sets have been implemented using dictionary but
> I absolutely need to have a set of dictionaries...any
> ideas how to do that?

Yes.  Create a dictionary subclass that is hashable.  Be sure not to
mutate it after using it in a set.



>>> class FrozenDict(dict):
    def __hash__(self):
        try:
            return self._hash
        except AttributeError:
            self._hash = hash(tuple(sorted(self.iteritems())))
            return self._hash


>>> d1 = FrozenDict(a=1, b=2, c=3)
>>> d2 = FrozenDict(d=4, e=5, f=6)
>>> d3 = FrozenDict(b=2, c=3, a=1)
>>> s = set([d1, d2, d3])
>>> s
set([{'e': 5, 'd': 4, 'f': 6}, {'a': 1, 'c': 3, 'b': 2}])
>>> d2 in s
True


Raymond Hettinger




More information about the Python-list mailing list