Вот решение с одной для цикла.
for i in reduce(lambda x, y: x+y, myDict.values()):
print i
myDict.values
это список.
In [33]: myDict.values()
Out[33]: [['1', '2', '3'], ['1', '2', '3', '4'], ['1', '2']]
С использованием reduce
я сделал это как единый список.
In [34]: reduce(lambda x, y: x+y, myDict.values())
Out[34]: ['1', '2', '3', '1', '2', '3', '4', '1', '2']
И итерацию хотя
Редактировать
Что касается времени выполнения с использованием timeit
In [69]: def test1():
for sublist in myDict.values():
for value in sublist:
print(value)
....:
In [70]: def test2():
for i in reduce(lambda x, y: x+y, myDict.values()):
print i
....:
In [71]: %timeit test1
10000000 loops, best of 3: 27 ns per loop
In [72]: %timeit test2
10000000 loops, best of 3: 25.6 ns per loop
Это работать лучше.
Выполните согласно timeit
модуля
In [81]: timeit.timeit(test2, number=10000)
Out[81]: 0.016376018524169922
In [82]: timeit.timeit(test1, number=10000)
Out[82]: 0.023879051208496094
Не совсем. Вы хотите перебирать значения (каждый список), а затем каждый член данного списка, поэтому вам нужно иметь две петли в самом общем смысле. Вероятно, есть некоторые оптимизации в зависимости от того, что вы пытаетесь сделать. (Например, 'для lst в myDict.values (): для значения в lst: print value') –
только потому, что имеют 2 вложенных цикла, которые автоматически не означают, что код медленный – RomCoo