FWIW I'm +1 on `d.keys()[i]`, `d.values()[i]`, `d.items()[i]`. I don't
see any major issue with adding a __getitem__ to the view classes. I think
it's a great idea, and it would make my life easier and would replace the
primary use case where I currently use `ubelt.peek
https://ubelt.readthedocs.io/en/latest/ubelt.html#ubelt.peek`.
On Mon, Jun 29, 2020 at 2:57 PM Stestagg
I'm quite supportive (+1) of the proposal to add numeric indexing to the 'dict_*' views.
Given that dictionaries are now ordered, it seems reasonable to look-up, for example, keys by index,
One simple example of where this is surprising is in the following:
>>> random.choice({'a': 1,}.keys()) TypeError: 'dict_keys' object is not subscriptable
This could be 'fixed' with a simple hack in the `random.choice` code, bit equally, implementing __getitem__ on `dict_*` types would enrich the interface.
Several times now, I've had the need to 'just get any key/value' from a large dictionary. I usually try first to run `var.keys()[0]` only to be told that I'm not allowed to do this, and instead have to ask python to make a copy of this datastructure with a different type, just so I can perform the index operation. This is possible, but seems redundant, and reinforces bad practices around creating copies of potentially large structures.
Another use-cases is doing variations of reduce() over dictionaries, where getting an initial value from the dict, and then performing operations over the remaining items is much simpler to do with indexing on the views.
Steve
On Mon, Jun 29, 2020 at 1:27 PM Hans Ginzel
wrote: Thank you.
On Fri, Jun 26, 2020 at 02:50:22PM -0300, Joao S. O. Bueno wrote:
On Fri, 26 Jun 2020 at 14:30, Hans Ginzel
wrote: thank you for making dict ordered. Is it planned to access key,value pair(s) by index? See https://stackoverflow.com/a/44687752/2556118 for example. Both for reading and (re)writing? Is it planned to insert pair(s) on exact index? Or generally to slice? See splice() in Perl, https://perldoc.perl.org/functions/splice.html. …
These are odd requirements.
No - Python dictionaries are ordered, by order of insertion only, but one can't generally do any manipulation by the numeric index of a dictionary entry - and it will stay that way.
That is fully corret to respect the _insertion_ order.
If you need such an hybrid data structure, you could just have a list of tuples as data structure, and use
collections.abc.MutableMapping >to provide a dict-like interface to it (an index for better than linear search). > >I could create such a data structure if you want,
Thank you, I will write it myself. H. _______________________________________________ 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/BWHRHY... Code of Conduct: http://python.org/psf/codeofconduct/
_______________________________________________ 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/32DNWT... Code of Conduct: http://python.org/psf/codeofconduct/
-- -Dr. Jon Crall (him)