首页 > 解决方案 > 从填充数组的 Python dict 到表示所有组合的 dict

问题描述

我想要一个输入是这样的函数:

my_dict = {
    'foo':[1,2,3]
    'bar': [True, False]
}

输出是:

results = {
    'foo':[1, 1, 2, 2, 3, 3]
    'bar': [True, False, True, False, True, False]
}

背景:我正在为机器学习编写自己的“交叉验证”函数。所以我需要展平所有参数来提供我的模型。我事先不知道有多少参数也没有它们的名字。所以我需要解析输入字典。

我觉得我让它变得比需要的更复杂,所以这就是我寻求帮助的原因。也许一个函数已经存在,即使我没有找到它。

谢谢你的帮助!

标签: python

解决方案


一个简单的方法如下

import itertools

keys = list(my_dict.keys())
product = list(itertools.product(*list(my_dict.values())))
results = {keys[i]: [item[i] for item in product] for i in range(len(keys))}

这给出了你所追求的结果。

print(results)
{'foo': [1, 1, 2, 2, 3, 3], 'bar': [True, False, True, False, True, False]}

推荐阅读