2012-07-10 278 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