Except many iterables don’t have a last item. And many more can’t give
you the last item efficiently.
That's manageable - reversed won't work either unless the object either implements either __reversed__, or __len__ and __getitem__. last could simply fail under the same conditions, in which case you could use last(list(obj)).
I think first, second and last, with optional default parameters, would be great additions to itertools. I use the toolz library's first and last functions frequently. The latter is not "smart" in the way described above and just consumes the iterable, possibly indefinitely.
Alex
On Wed, Oct 6, 2021 at 10:46 AM Christopher Barker pythonchb@gmail.com wrote:
- dict.first_key = lambda self: next(iter(self))
- dict.first_val = lambda self: next(iter(self.values()))
- dict.first_item = lambda self: next(iter(self.items()))
- dict.last_key = lambda self: next(reversed(self))
- dict.last_val = lambda self: next(reversed(self.values()))
- dict.last_item = lambda self: next(reversed(self.items()))
But I think I like a lot more the idea of adding general ways of doing these things to itertools.
Except many iterables don’t have a last item. And many more can’t give you the last item efficiently.
-CHB
On 5 Oct 2021, at 05:30, Christopher Barker pythonchb@gmail.com wrote:
On Mon, Oct 4, 2021 at 5:46 PM Erik Demaine edemaine@mit.edu wrote:
Have folks thought about allowing indexing dictionary views as in the following code, where d is a dict object?
d.keys()[0] d.keys()[-1] d.values()[0] d.values()[-1] d.items()[0] d.items()[-1] # item that would be returned by d.popitem()
since dicts were made order-preserving, indexing the keys, items, etc does make some sense.
I've also often wanted to get an arbitrary item/key from a dictionary,
and
This is indeed one of the use cases identified.
I found some related discussion in
https://mail.python.org/archives/list/python-ideas@python.org/thread/QVTGZD6... but not this exact idea.
That's a pretty different idea but this exact idea has been discussed on this list relatively recently. I still like it, but there wan't much general support.
I'll leave it exercise for the read to find that thead, but it is there, and I suggest you look for it if you want to further pursue this idea.
-CHB
-- Christopher Barker, PhD (Chris)
Python Language Consulting
- Teaching
- Scientific Software Development
- Desktop GUI and Web Development
- wxPython, numpy, scipy, Cython
Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-leave@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/RAEDZP...
Code of Conduct: http://python.org/psf/codeofconduct/
--
Christopher Barker, PhD (Chris)
Python Language Consulting
- Teaching
- Scientific Software Development
- Desktop GUI and Web Development
- wxPython, numpy, scipy, Cython
Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-leave@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/THRXG2... Code of Conduct: http://python.org/psf/codeofconduct/