Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

in python, how do i iterate a nested dict with a dynamic number of nests?

Tags:

python

nested

OK by dynamic I mean unknown at runtime.

here is a dict:

aDict[1]=[1,2,3]
aDict[2]=[7,8,9,10]
aDict[n]=[x,y]

I don't know how many n will be but I want to loop as follows:

for l1 in aDict[1]:
  for l2 in aDict[2]:
    for ln in aDict[n]:
      # do stuff with l1, l2, ln combination.

Any suggestions on how to do this? I am relatively new to python so please be gentle (although I do program in php). BTW I am using python 3.1

like image 883
khany Avatar asked Oct 14 '11 08:10

khany


2 Answers

You need itertools.product.

from itertools import product

for vals in product(*list(aDict.values())):
    # vals will be (l1, l2, ..., ln) tuple
like image 146
DrTyrsa Avatar answered Oct 23 '22 05:10

DrTyrsa


Same idea as DrTyrsa, but making sure order is right.

from itertools import product

for vals in product( *[aDict[i] for i in sorted(aDict.keys())]):
    print vals
like image 25
MatthieuW Avatar answered Oct 23 '22 03:10

MatthieuW