Roy Smith wrote: > import types > > class slicableDict (dict): > def __getitem__ (self, index): > if type (index) == types.SliceType: > d2 = slicableDict() > for key in self.keys(): > if key >= index.start and key < index.stop: > d2[key] = self[key] > return d2 > else: > return dict.__getitem__ (self, index) [...]
> Roy-Smiths-Computer:play$ ./slice.py > {'oysters': 4, 'hen': 1, 'porpoises': 5, 'geese': 3, 'ducks': 2} > {'hen': 1, 'geese': 3, 'ducks': 2} > > I defined d[x:y] as returning a new dictionary which contains those items > from the original whose keys are in the range x <= key < y. I'm not sure > this is terribly useful but it's a neat demonstration of just how simple > Python makes it to do stuff like this. I can't imagine how much work it > would be to add a similar functionality to something like C++ multimap. Other possibility, probably faster when almost all keys in the range are in the dictionary: class sdict(dict): def __getitem__(self, index): if isinstance(index, slice): d = {} for key in xrange(slice.start, slice.stop, slice.step): if key in self: d[key] = self[key] return d else: return dict.__getitem__(self, index) Reinhold -- http://mail.python.org/mailman/listinfo/python-list