2012-07-10 325 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'有三個值會發生什麼?最後一個值是否重複?值是循環的嗎? – 2012-07-10 22:45:00

+0

@Lattyware:我已經更新了示例以更清晰。 – 2012-07-10 22:49:03

回答

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'函數的產品函數嗎? – 2012-07-10 22:55:49

+0

@ZameerManji是的,對不起,我只是在編輯,以便更清楚。 – 2012-07-10 22:56:25

+0

這很聰明! – mVChr 2012-07-10 22:58:40