2017-03-06 3 views
1

각 값이리스트 목록 인 사전이 있습니다. 같은사전 값의 가능한 모든 조합을 반복하고 싶습니다.

뭔가 :

sites = {'e1': [[0, 1, 3], [0, 2, 3]], 'e2': [[0, 1, 4], [0, 3, 4]]} 

나는 모든 가능한 조합 목록 (내 예 즉 쌍) (e2e1 + 하나의 목록 즉 하나 개의 목록 등)을 반복하려고합니다.

의 예와 더 나은는 :

나는이 모든 조합을 통해 루프를 원하는 :

[0, 1, 3]; [0, 1, 4] 
[0, 1, 3]; [0, 3, 4] 
[0, 2, 3]; [0, 1, 4] 
[0, 2, 3]; [0, 3, 4] 

이 예제 사전 두 개의 키를 가지고 있지만 실제로 내가에서해야합니다 얼마나 많은 키 모른다 내 사전. 그것은 2 이상일 수 있습니다.

도와 주시겠습니까?

+1

다음을 참조하십시오. 'itertools.product (* sites.values ​​())'가 이것을 할 것입니다. –

+0

또는'list (reduce (product, sites.values ​​())) ' –

+0

2 튜플 또는 n 튜플 (dict의 n 항목)을 가져올 것인지 여부에 달려 있습니다. 'itertools.product'는 n-tuple을 산출 할 것입니다. 'itertools.combinations'를 사용하면 튜플의 길이를 지정할 수 있습니다. –

답변

2
당신은 DICT의 목록 값 사이의 직교 제품을 찾고 있습니다

. 원하는 결과를 얻으려면 다음과 같이 itertools.product을 사용할 수 있습니다.

>>> from itertools import product 
>>> sites = {'e1': [[0, 1, 3], [0, 2, 3]], 'e2': [[0, 1, 4], [0, 3, 4]]} 

>>> list(product(*sites.values())) 
[([0, 1, 3], [0, 1, 4]), 
([0, 1, 3], [0, 3, 4]), 
([0, 2, 3], [0, 1, 4]), 
([0, 2, 3], [0, 3, 4])] 
관련 문제