On Thu, Jul 30, 2020 at 11:55 AM Christopher Barker <pythonchb@gmail.com> wrote:
 > smaller_dict = dict(islice(large_dict.items(), 0, 255))
well, beauty is in the eye of the beholder, of course. But really, you think it's pretty to import itertools, then make a function call, for what's very much a slicing operation?

In your post that introduced that,that is *exactly* what I thought of when you first described the issue, before I read down to your solution.  It took a fraction of a second to think of for me.  It *is* slightly verbose.  What do you think about this in current Python:

>>> large = {i:i**2 for i in range(1000)}
>>> import sys
>>> from itertools import islice
>>> class IterSlicer:
...     def __getitem__(self, what):
...         it, sl = what
...         return islice(it, sl.start or 0, sl.stop or sys.maxsize, sl.step or 1)
...
>>> IS = IterSlicer()
>>> dict(IS[large.items(), 3:10:2])
{3: 9, 5: 25, 7: 49, 9: 81}
>>> from itertools import count
>>> set(IS[count(), 10:100:9])
{64, 37, 73, 10, 46, 82, 19, 55, 91, 28}

Potentially IterSlicer, or IS, could live in itertools (or more likely more-itertools) just to provide a short way to use slice notation with an arbitrary iterable... not limited to dict.items().


--
The dead increasingly dominate and strangle both the living and the
not-yet born.  Vampiric capital and undead corporate persons abuse
the lives and control the thoughts of homo faber. Ideas, once born,
become abortifacients against new conceptions.