Могу ли я выполнить несколько диктов подряд, не объединяя их? - PullRequest
4 голосов
/ 17 ноября 2011

В python, скажем, у меня есть три дикта:

d1, d2, d3 = {...}, {...}, {...}

Мне нужно перебрать каждый из них и выполнить одну и ту же операцию:

for k, v in d1.iteritems():
    do_some_stuff(k, v)
for k, v in d3.iteritems():
    do_some_stuff(k, v)
for k, v in d3.iteritems():
    do_some_stuff(k, v)

Есть ли способ сделать это в одном цикле, чтобы каждый словарь повторялся последовательно? Примерно так, но здесь синтаксис явно неправильный:

for k, v in d1.iteritems(), d2.iteritems(), d3.iteritems():
    do_some_stuff(k, v)

Я не хочу объединить словари. Лучшее, что я могу придумать, - это вложенный цикл ниже, но, похоже, должен быть «более питонический, единственный цикл».

for d in (d1, d2, d3):
    for k, v in d.iteritems():
        do_some_stuff(k, v)

1 Ответ

10 голосов
/ 17 ноября 2011

Вы хотите chain:

from itertools import chain

for k,v in chain(d1.iteritems(), d2.iteritems(), d3.iteritems()):
    do_some_stuff(k, v)

или более общее

ds = d1,d2,d3
for k,v in chain.from_iterable(d.iteritems() for d in ds):
    do_some_stuff(k, v)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...