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.