2011-10-14 6 views
10

동적으로 확인 나는 런타임에 알 수 없음을 의미합니다. 여기 파이썬에서 중첩 된 동적 번호로 중첩 된 dict을 반복하려면 어떻게해야합니까?

는 딕셔너리입니다 :

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

내가 얼마나 많은 N 모르지만 다음과 같이 내가 루프를 원하는 :이 작업을 수행하는 방법에 대한

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

어떤 제안? 나는 비교적 Python에 익숙하지 않으므로 (PHP에서 프로그램을 작성한다고해도) 부드럽게 작성하십시오. BTW 나는 파이썬 3.1을 사용하고 있습니다.

답변

11

itertools.product이 필요합니다.

from itertools import product 

for vals in product(*list(aDict.values())): 
    # vals will be (l1, l2, ..., ln) tuple 
+1

완벽! 당신은 내가 이것을 달성하기 위해 PHP를 거쳐야 만하는지 알아야한다. – khany

+2

귀하의 요소가 무작위로 주문하게 될 것입니다 – MatthieuW

+0

@MatthieuW는 주문을 안정적으로함으로써 아래에서 개선됩니다 ... – smci

11

DrTyrsa와 같은 생각이지만 올바른 순서인지 확인하십시오.

from itertools import product 

for vals in product(*[aDict[i] for i in sorted(aDict.keys())]): 
    print vals 
관련 문제