Dictionary keys (again) (was Re: lambda)
Steven Bethard
steven.bethard at gmail.com
Wed Jan 19 12:17:00 EST 2005
Nick Coghlan wrote:
> For a 'mutable key' to make sense, the following:
>
> lst = []
> dct = {l: "Hi!"}
> print dct[[]]
> print dct[lst]
> lst.append(1)
> print dct[[1]]
> print dct[lst]
>
> Should print:
> Hi
> Hi
> Hi
> Hi
And here's an implementation that does so:
py> class sillydict(dict):
... def __getitem__(self, key):
... items = self.items()
... self.clear()
... self.update(items)
... return super(sillydict, self).__getitem__(key)
...
py> class sillylist(list):
... def __hash__(self):
... return hash(tuple(self))
...
py> lst = sillylist([])
py> dct = sillydict({lst: "Hi!"})
py> print dct[sillylist([])]
Hi!
py> print dct[lst]
Hi!
py> lst.append(1)
py> print dct[sillylist([1])]
Hi!
py> print dct[lst]
Hi!
Of course, as noted by the classes themselves, they're silly. ;) But as
long as you don't mind rehashing the dict each time the dict is accessed
;) you can get sane behavior even in the presence of mutable keys.
Steve
More information about the Python-list
mailing list