列表字典的笛卡尔积作为项

问题描述 投票:3回答:3

我有以下形式的字典:

{
    'variable_1': [a1, b1, c1],
    'variable_2': [a2, b2, c2],
    'variable_3': [a3, b3, c3],
    ...
}

(此词典中有n个条目。] >>

例如,我想获得所有不同值的所有可能组合的问题:

[(a1, a2, a3), (b1, a2, a3), (c1, a2, a3), (a1, b2, a3), ...]

我知道这可以通过使用itertools的笛卡尔积来完成。但是,我注意到如果结果采用以下形式,我的问题会容易得多:

[{'variable1': a1, 'variable2':a2, 'variable3': a3}, {'variable1': b1, 'variable2':a2, 'variable3': a3}, ...]

有一种简单的方法吗?

我有以下格式的字典:{'variable_1':[a1,b1,c1],'variable_2':[a2,b2,c2],'variable_3':[a3,b3,c3],.. 。}(此词典中有n个条目)。我...

python cartesian-product
3个回答
1
投票
import itertools
d = {
'variable_1': ['a1', 'b1', 'c1'],
'variable_2': ['a2', 'b2', 'c2'],
'variable_3': ['a3', 'b3', 'c3'],
}


keys = (list(d.keys())) # ['variable_1', 'variable_2', 'variable_3']
values = (list(itertools.product(*(list(d.values()))))) #[('a1', 'a2', 'a3'), ('a1', 'a2', 'b3'), ('a1', 'a2', 'c3')...]

dictionary = []
for val in values:
    dictionary.append(dict(zip(keys, val)))

1
投票

您还可以对非导入解决方案使用递归函数:


0
投票

您仍然需要itertools.product

© www.soinside.com 2019 - 2024. All rights reserved.