PEP Idea: Multi-get for lists/tuples and dictionaries (inspired in NumPy)
Pieter van Oostrum
pieter-l at vanoostrum.org
Thu Mar 19 11:20:32 EDT 2020
Santiago Basulto <santiago.basulto at gmail.com> writes:
> Hello community. I have an idea to share with the list to see what you all
> think about it.
>
> I happen to use both Python for Data Science (with our regular friends
> NumPy and Pandas) as well as for scripting and backend development. Every
> time I'm working in server-side Python (not the PyData stack), I find
> myself missing A LOT features from NumPy, like fancy indexing or boolean
> arrays.
>
> So, has it ever been considered to bake into Python's builtin list and
> dictionary types functionality inspired by NumPy? I think multi indexing
> alone would be huge addition. A few examples:
>
> For lists and tuples:
> >>> l = ['a', 'b', 'c']
> >>> l[[0, -1]]
> ['a', 'c']
>
> For dictionaries it'd even be more useful:
> d = {
> 'first_name': 'Frances',
> 'last_name': 'Allen',
> 'email': 'fallen at ibm.com'
> }
> fname, lname = d[['first_name', 'last_name']]
>
> I really like the syntax of boolean arrays too, but considering we have
> list comprehensions, seems a little more difficult to sell.
>
> I'd love to see if this is something people would support, and see if
> there's room to submit a PEP.
How about implementing it yourself:
In [35]: class MultiDict(dict):
... def __getitem__(self, idx):
... if isinstance(idx, list):
... return [self[i] for i in idx]
... return super().__getitem__(idx)
In [36]: d = MultiDict({
... 'first_name': 'Frances',
... 'last_name': 'Allen',
... 'email': 'fallen at ibm.com'
... })
In [37]: d
Out[37]: {'first_name': 'Frances', 'last_name': 'Allen', 'email': 'fallen at ibm.com'}
In [38]: d['email']
Out[38]: 'fallen at ibm.com'
In [39]: d[['first_name', 'last_name']]
Out[39]: ['Frances', 'Allen']
The implementation of other methods, like __setitem__ and __init__, and maybe some more subtle details like exceptions, is left as an exercise for the reader.
--
Pieter van Oostrum
www: http://pieter.vanoostrum.org/
PGP key: [8DAE142BE17999C4]
More information about the Python-list
mailing list