조합

2014-04-01 3 views
0

좋아 나는이 같은 파이썬에서 사전했습니다 있도록 :조합

dict={'a':'','b':'2','c':'3'} 

을 어떻게 출력과 같이받을 수 있나요 :

[['a','b','c'], 
['a','2','c'], 
['a','b','3'], 
['a','2','3']] 

이 결과에서 요소의 원래 위치는 변경되지 않지만 단순히 사전에서 각각의 의미로 대체됩니다. 우리는 요소의 다른 조합을 가진 목록의 목록을 얻습니다.

이것이 가능합니까? 어떻게해야합니까? 도와주세요.

답변

2

사전은 주문되지 않으므로 "요소의 원래 위치"가 없습니다.

>>> poss 
[('a',), ('c', '3'), ('b', '2')] 

당신은 순서에 따라 정렬 할 수 있습니다 : poss는 각 학기 사이에서 선택하고자하는 모든 선택 사항을 설명

>>> from itertools import product 
>>> d = {'a':'','b':'2','c':'3'} 
>>> poss = [(k,v) if v else (k,) for k,v in d.items()] 
>>> list(product(*poss)) 
[('a', 'c', 'b'), ('a', 'c', '2'), ('a', '3', 'b'), ('a', '3', '2')] 

: 그것은 당신이 모든 가능성을 생성하는 itertools.product를 사용할 수 있다고 생각했다 키의, 나는 추측한다 :

>>> poss = [(k,v) if v else (k,) for k,v in sorted(d.items())] 
>>> list(product(*poss)) 
[('a', 'b', 'c'), ('a', 'b', '3'), ('a', '2', 'c'), ('a', '2', '3')] 
+0

고맙습니다. 이것이 내가 필요한 것입니다. –