2012-07-10 2 views
3

문자열 사전을 목록으로 변환하여 문자열을 해당 목록의 값으로 매핑하는 사전 목록으로 변환하는 방법은 무엇입니까? 예를 들어, 사전 다음문자열 사전을 목록으로 변환하여 사전 목록으로 변환하는 방법은 무엇입니까?

{'a': [1,2], 
'b': ['x', 'y', 'z']} 

다음 목록

[{'a': 1, 'b': 'x'}, {'a': 1, 'b': 'y'}, {'a': 1, 'b': 'z'}, 
{'a': 2, 'b': 'x'}, {'a': 2, 'b': 'y'}, {'a': 2, 'b': 'z'},] 
+2

'a'가 두 개의 값을 갖고 'b'가 세 개가 있으면 어떻게됩니까? 마지막 값이 반복됩니까? 값이 반복됩니까? –

+0

@Lattyware : 예를 더 명확하게 업데이트했습니다. –

답변

8

당신이 원하는 중요한 것은 값의 제품입니다, 다음 사전을 다시로 변환 될 것이다. 우리는 실제로 itertools.product()의 도움으로 쉽게 할 수 있습니다

>>> from itertools import product 
>>> test = {'a': [1, 2], 'b': ['x', 'y', 'z']} 
>>> [dict(zip(test.keys(), part)) for part in product(*test.values())] 
[{'a': 1, 'b': 'x'}, {'a': 1, 'b': 'y'}, {'a': 1, 'b': 'z'}, 
{'a': 2, 'b': 'x'}, {'a': 2, 'b': 'y'}, {'a': 2, 'b': 'z'}] 

우리가 사전에 목록의 모든 제품을 우리가 할 수 있으며, 각 생산 쌍을 (또는 그 이상 항목의 경우에 사전, 임의로 긴 튜플)을 선택하고 사전의 키로 압축합니다. 그런 다음 이것을 이것을 내장 된 dict()에 전달하여 사전을 만듭니다. 이것은 목록을 빠르게 작성하는 목록 이해력의 전부입니다.

+1

은'itertools.product' 함수의 제품 기능입니까? –

+0

@ZameerManji 예, 죄송합니다. –

+0

그것은 매우 영리합니다! – mVChr