2011-12-17 21 views
0

を取得するにはどのように私はそのような何かの辞書を持っている:は、すべての可能な組み合わせに

{'Y': [1, 2, 6, 7], 
'X': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], 
'Z': [0, 3, 6, 9]} 

3つの以上の変数があるかもしれません。 私はこれらの変数のすべての組み合わせを得ることはできません。私はそのためのアルゴリズムを理解することはできません

[{'Y': 1, 'X': 0, 'Z': 0}, 
{'Y': 1, 'X': 0, 'Z': 3} ....] 

:ような何かを得るために 。 私を助けてください。

答えて

4

他のポスターが正しいです:itertools.productは非常に役に立ちます。ただし、辞書の書式設定の仕方により、元の辞書キーを確実に取得するためには注意が必要です。フェリックス・ヤンずつに基づいて

import itertools 

data = {'Y': [1, 2, 6, 7], 
     'X': [0, 1, 2, 3, 4, 5, 6, 7, 
       8, 9, 10, 11, 12, 13, 14, 15, 16, 
       17, 18, 19, 20, 21, 22, 23, 24], 
     'Z': [0, 3, 6, 9]} 
# Join the key and value together in tuples 
# [[('Y', 1), ('Y', 2), ('Y', 6), ('Y', 7)], ...] 
tuples = [[(var, val) for val in data[var]] for var in data] 

# Create the dictionary setting values to X, Y, and Z 
# [{'Y': 1, 'X': 0, 'Z': 0}, {'Y': 1, 'X': 0, 'Z': 3} ....] 
answer = [dict(a) for a in itertools.product(*tuples)] 
1

itertools.product()を使用してください。 list(itertools.product(*your_dict.values()))を使用して

+0

は、あなただけのリンクを超えて、この答えにいくつかの詳細を追加してもらえますか? – jwiscarson

2

は、単純にそれを得ることができます:)

EDIT:あなたの予想結果のために、私は次のように書いている:(

[{key: value[n] for n, key in enumerate(your_dict.keys())} for value in itertools.product(*your_dict.values())] 

その格好良いが、それだけで動作していないだけPythonで2.7+)。

+2

dictコンストラクタをタプルと組み合わせて使用​​すると、Python 2.7に制限されないようにすることができます: 'it {{dict(key、value [n] .values())] ' – HardlyKnowEm

2

少し良く探して解決策:

[dict(zip(your_dict.keys(), item)) for item in itertools.product(*your_dict.values())] 
関連する問題