[Python-ideas] Syntax for key-value iteration over mappings

Chris Angelico rosuav at gmail.com
Mon Jul 27 17:19:48 CEST 2015


On Mon, Jul 27, 2015 at 12:12 PM, Steven D'Aprano <steve at pearwood.info> wrote:
> Being a special case, you can only use this for iterables that have an
> items() method. You can't do:
>
>     for k:v in [(1, 'a'), (2, 'b')]: ...
>
> because the list doesn't have an items() method.
>

Here's a crazy alternative: Generalize it to subsume the common use of
enumerate(). Iterate over a dict thus:

for name:obj in globals():
    # do something with the key and/or value

And iterate over a list, generator, or any other simple linear iterable thus:

for idx:val in sys.argv:
    # do something with the arg and its position

In other words, the two-part iteration mode gives you values *and
their indices*. If an object declares its own way of doing this, it
provides the keys and values itself; otherwise, the default is
equivalent to passing it through enumerate, so you'll get sequential
numbers from zero.

I don't know that this is a *good* idea (for one thing, simple
iteration is equivalent to the first part for a dict, but the second
part for everything else), but it does give a plausible meaning to
two-part iteration that isn't over a dictionary.

ChrisA


More information about the Python-ideas mailing list