> From: [email protected] > Date: Thu, 21 Jan 2016 11:02:40 +0000 > To: [email protected] > Subject: Re: [Tutor] Why is an OrderedDict not sliceable? > CC: [email protected] > > On 21 January 2016 at 09:19, Ben Finney <[email protected]> wrote: > > Albert-Jan Roskam <[email protected]> writes: > > > >> Why is an OrderedDict not sliceable? > > > > Because slicing implies index access. The built-in ‘dict’ and > > ‘collections.OrderedDict’ both do not support indexed access:: > > According to a narrow definition of indexed access. I would say that > d[k] is index access even if d is a dict and k a key. > > Albert-Jan I guess what you want is this: > > from collections import OrderedDict > > class SliceableOrderedDict(OrderedDict): > def __getitem__(self, sl): > if isinstance(sl, slice): > keys = list(self) > keyslice = slice( > None if sl.start is None else keys.index(sl.start), > None if sl.stop is None else keys.index(sl.stop), > sl.step > ) > newitems = ((k, self[k]) for k in keys[keyslice]) > return SliceableOrderedDict(newitems) > else: > return super().__getitem__(sl) That looks interesting. I will check this out tomorrow at work. If I read it correctly this is indeed exactly what I meant. Thank you!!
> I guess that the authors of OrderedDict just didn't really consider > this to be very useful. Apart from having ordered iteration > OrderedDict is not really that deeply thought out. There's a thread on > python-ideas about the inconsistent behaviour of the keys and values > views and equality comparison of OrderedDicts on python-ideas at the > moment: > > https://mail.python.org/pipermail/python-ideas/2015-December/037472.html As I said in a prior email: That is SCARY! Should I just avoid OrderedDict like the plague? > -- > Oscar > _______________________________________________ > Tutor maillist - [email protected] > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor _______________________________________________ Tutor maillist - [email protected] To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor
