> Date: Thu, 21 Jan 2016 12:00:29 +1100 > From: st...@pearwood.info > To: tutor@python.org > Subject: Re: [Tutor] Why is an OrderedDict not sliceable? > > On Wed, Jan 20, 2016 at 01:33:17PM +0000, Albert-Jan Roskam wrote: > > Hi, > > > > Like the subject says: Why is an OrderedDict not sliceable? (From the > > collections library). Was that an intentional omission, or a mistake? > > [1] > > Because slicing a dict makes no sense. A dict is a mapping, not a > sequence.
For a regular dict: yes, I agree that doesn't make sense, because a regular dict is unordered. A collections.OrderedDict on the other hand.. > d = OrderedDict() > d["cow"] = "a" > d["fox"] = "b" > d["ape"] = "c" > d["dog"] = "d" > d["bee"] = "e" > > I can do a dict lookup on a key: > > d["cow"] > > What would a slice even mean? d[1:4] but 1, 2, 3 are not keys of the > dict. Indexing would create ambiguity, e.g d[1] might mean * return the value associated with key 1 * return the first value But that's not true for slices, because they cannot be dictionary keys anyway: >>> {slice(1, 2): None} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type With islice it is easy to do it anyway, but I still find it strange that OrderedDict.__getitem__ does not do that already (sorry!) >>> from itertools import islice >>> from collections import OrderedDict >>> od = OrderedDict({"a": 1, "b": 2}) >>> list(islice(od, 1, 2)) ['b'] _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor