Reputation: 3186
I have a dict that looks like the following:
myDict = {'a':['1','2','3'],'b':['1','2'],'c':['1','2','3','4']}
I'm trying to iterate through all its values like the following:
for i in myDict.iterkeys():
for j in range(0,len(myDict[i])):
print myDict[i][j]
I saw couple posts on stackoverflow here and here. but I'm wondering if there is a faster way of doing that without having to use two for loops?
Upvotes: 0
Views: 97
Reputation: 16081
Here is a solution with one for loop.
for i in reduce(lambda x, y: x+y, myDict.values()):
print i
myDict.values
it's a list of list.
In [33]: myDict.values()
Out[33]: [['1', '2', '3'], ['1', '2', '3', '4'], ['1', '2']]
With using reduce
i made it as like a single list.
In [34]: reduce(lambda x, y: x+y, myDict.values())
Out[34]: ['1', '2', '3', '1', '2', '3', '4', '1', '2']
And iterate though it
Edit
Regarding time of execution using 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
It's perform better.
Perform as per the timeit
module
In [81]: timeit.timeit(test2, number=10000)
Out[81]: 0.016376018524169922
In [82]: timeit.timeit(test1, number=10000)
Out[82]: 0.023879051208496094
Upvotes: 2
Reputation: 8488
You can just say
for sub_list in myDict.values():
for item in sub_list:
print(item)
But that doesn't really answer your loop in a loop question. There isn't going to be a solution for nested iteration given a dictionary that contains lists.
Upvotes: 2
Reputation: 24133
You can just get the values from the dictionary, and the values from the sublist, no need to key or index:
for sublist in myDict.values():
for value in sublist:
print(value)
Upvotes: 1