[issue32010] Multiple get "itemgetter"

2017-11-12 Thread Raymond Hettinger

Raymond Hettinger  added the comment:

I also don't think this should be done to itemgetter() which should remain 
focused on its core task.

Thank you for the suggestion, but am marking this as closed.  Perhaps consider 
posting a recipe to the ASPN cookbook (I've posted a lot of ideas there) or 
publish something on PyPI to see if there is any uptake.

--
nosy: +rhettinger
stage:  -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue32010] Multiple get "itemgetter"

2017-11-12 Thread Serhiy Storchaka

Serhiy Storchaka  added the comment:

As you have said, this will break existing code.

And this is not applicable to non-string indices.

I think that it would be easier to use a lambda or local function for this: 
`lambda x: x['a']['b']`. It is shorter and cleaner.

I don't see how this is related to the Python-Dev thread.

--
nosy: +serhiy.storchaka
resolution:  -> rejected

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue32010] Multiple get "itemgetter"

2017-11-12 Thread Mario Corchero

New submission from Mario Corchero :

At the moment we can get an operator that performs multiple "gets" in object 
attributes. Example:

>>> getter = operator.attrgetter("child1.child2")
>>> o = mock.Mock()
>>> getter(o)


On the other hand, itemgetter -which can be used for mappings- can only access 
single level.

  a = itemgetter("a")(d)

The proposal is to add a way to perform multiple fetches the say way attrgetter 
is doing it.

The main worry here for me would be that it might break some existing callers 
if someone had "a.b" as a key in a dict and were using itemgetter.
An option might be a new argument separator to split those so it'd look like:

  d = dict(a=dict(b=1), b=dict(c=2)) 
  ab = itemgetter("a.b", separator=".")(d)

This is effectively sugar for: itemgetter("b")(itemgetter("a")(d))

This should be available in the *args version as well so the following is valid:

  d = dict(a=dict(b=1), b=dict(c=2)) 
  ab, ac = itemgetter("a.b", "b.c", separator=".")(d)


This is coming from python-dev mailing list thread: "[Python-Dev] Analog of PEP 
448 for dicts (unpacking in assignment with dict rhs)"

I have a sample implementation on the py side. If this is interesting I can 
send a PR with the full impl (I havent started yet with the C one)
If anyone is interested in the ongoing implementation: 
https://github.com/mariocj89/cpython/tree/multiple_itemgetter

--
components: Library (Lib)
messages: 306114
nosy: mariocj89
priority: normal
severity: normal
status: open
title: Multiple get "itemgetter"
type: enhancement
versions: Python 3.7

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com