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)
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
--
Oscar
_______________________________________________
Tutor maillist - [email protected]
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor