Greg Ewing <[EMAIL PROTECTED]> wrote: > Also, everyone, please keep in mind that you always have > the option of using a *dictionary*, in which case your > indices can start wherever you want. > > You can't slice them, true, but you can't have everything. :-)
Of course you can slice them, you just have to subclass dict! The following was about 15 minutes work: --------------- 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) d = slicableDict() d['hen'] = 1 d['ducks'] = 2 d['geese'] = 3 d['oysters'] = 4 d['porpoises'] = 5 print d print d['a':'m'] --------------- 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. I'm sure the code above could be improved, and I know I've ignored all sorts of things like steps, and error checking. Frankly, I'm amazed this worked at all; I expected to get a syntax error when I tried to create a slice with non-numeric values. PS: Extra credit if you can identify the set of keys I used without resorting to google :-) -- http://mail.python.org/mailman/listinfo/python-list