tkyass
tkyass

Reputation: 3186

Iterating over a variable sized lists in Python dict

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

Answers (3)

Rahul K P
Rahul K P

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

AlexLordThorsen
AlexLordThorsen

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

Open AI - Opting Out
Open AI - Opting Out

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

Related Questions