2011-10-14 3 views
10

動的でOK実行時に不明を意味します。ここ のpythonで、どのように入れ子の動的な番号で入れ子の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でプログラムをやっていますが)。私はPython 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 
関連する問題