2015-10-15 41 views
0

值的所有组合,具有以下词典的词典列表:产生代表每个键

d = { 
    'a': [1, 2, 3], 
    'b': [True, False] 
} 

怎样才能代表每个键的值的所有组合的词典列表?输出应该是这样的:

combinations = [ 
    {'a': 1, 'b': True}, 
    {'a': 2, 'b': True}, 
    {'a': 3, 'b': True}, 
    {'a': 1, 'b': False}, 
    {'a': 2, 'b': False}, 
    {'a': 3, 'b': False} 
] 

这应该与键的任意数量和值的字典中的任意长度工作。我们可以假设这些值总是一个列表。

回答

4

这可以使用itertools解决:(!这是罚款)

[dict(zip(d, values)) for values in itertools.product(*d.values())] 
+0

如果你要问和自我回答,你应该确保检查的DUP。这个问题是[this]的一个重复(http://stackoverflow.com/questions/26724860/get-list-of-all-possible-dict-configs-in-python)和[this](http:// stackoverflow .com/questions/15211568/combine-python-dictionary-permutations-into-list-of-dictionaries),也可能是其他人。 – DSM

+0

@DSM:你说得对。我总是搜索重复项目(因为在回答之前,我有这个问题,所以我也有兴趣找到解决方案),但没有找到任何答案。我在提问时也总是检查“可能的重复项目”列表,但没有显示真正的重复项目。我想有时候找到真正的重复项并不是那么容易的事情(在问同样的问题之前,YusufX似乎找不到重复项)。无论如何,谢谢你指出。 – Peque

+0

@DSM:标记为重复。 ;-) – Peque