如何將字符串字典轉換爲列表,以將字符串映射爲這些列表中的值的字典列表?例如,下面的字典如何將字典的字典轉換爲列表到字典列表?
{'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'},]
如何將字符串字典轉換爲列表,以將字符串映射爲這些列表中的值的字典列表?例如,下面的字典如何將字典的字典轉換爲列表到字典列表?
{'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'},]
你想在這裏的主要是值的產品,然後重新創建字典。事實上,我們可以用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()
內建的字典。這一切都在列表理解之內,以便快速製作列表。
是'itertools.product'函數的產品函數嗎? – 2012-07-10 22:55:49
@ZameerManji是的,對不起,我只是在編輯,以便更清楚。 – 2012-07-10 22:56:25
這很聰明! – mVChr 2012-07-10 22:58:40
如果'a'有兩個值而'b'有三個值會發生什麼?最後一個值是否重複?值是循環的嗎? – 2012-07-10 22:45:00
@Lattyware:我已經更新了示例以更清晰。 – 2012-07-10 22:49:03