当前位置: 首页 > 知识库问答 >
问题:

如何在Python中从dict of list中的值生成所有组合

慕永年
2023-03-14

我想生成dict中索引列表中的所有值组合:

{'A':['D','E'],'B':['F','G','H'],'C':['I','J']}

每次,每个判决条目的一个项目将被选择并组合到其他键的项目中,所以我有:

['D','F','I']
['D','F','J']
['D','G','I']
['D','G','J']
['D','H','I']
...
['E','H','J']

我知道在itertools中可以生成列表中项目的组合,但我不认为我可以在这里使用它,因为我有不同的值“池”。

是否有任何现有的解决方案可以做到这一点,或者我应该如何着手自己做到这一点,我完全被这种嵌套结构所困扰。

共有3个答案

雷浩思
2023-03-14

如何使用的参数网格从Scikit学习?它创建了一个生成器,您可以在正常的for循环中迭代它。在每次迭代中,您将拥有一个包含当前参数组合的字典。

from sklearn.model_selection import ParameterGrid

params = {'A':['D','E'],'B':['F','G','H'],'C':['I','J']}
param_grid = ParameterGrid(params)
for dict_ in param_grid:
    # Do something with the current parameter combination in ``dict_``
    print(dict_["A"])
    print(dict_["B"])
    print(dict_["C"])

宗涵蓄
2023-03-14

如果你想保持key: value在排列中,你可以使用:

import itertools
keys, values = zip(*my_dict.items())
permutations_dicts = [dict(zip(keys, v)) for v in itertools.product(*values)]

这将为您提供一个包含排列的目录列表:

print(permutations_dicts)
[{'A':'D', 'B':'F', 'C':'I'}, 
 {'A':'D', 'B':'F', 'C':'J'},
 ...
 ]

免责声明不完全是OP的要求,但谷歌让我来这里寻找。

郑旭
2023-03-14
import itertools as it

my_dict={'A':['D','E'],'B':['F','G','H'],'C':['I','J']}
allNames = sorted(my_dict)
combinations = it.product(*(my_dict[Name] for Name in allNames))
print(list(combinations))

其中打印:

[('D', 'F', 'I'), ('D', 'F', 'J'), ('D', 'G', 'I'), ('D', 'G', 'J'), ('D', 'H', 'I'), ('D', 'H', 'J'), ('E', 'F', 'I'), ('E', 'F', 'J'), ('E', 'G', 'I'), ('E', 'G', 'J'), ('E', 'H', 'I'), ('E', 'H', 'J')]
 类似资料:
  • 问题内容: 这是问题: 给定Python中的项目列表,我将如何获得这些项目的所有可能组合? 这个站点上有几个类似的问题,建议使用itertools.combine,但是仅返回我需要的一部分: 如您所见,它仅按严格顺序返回项目,而不返回(2,1),(3,2),(3,1),(2、1、3),(3、1、2),( 2,3,1)和(3,2,1)。有一些解决方法吗?我似乎什么都没想。 问题答案: 用途: 帮助:

  • 问题内容: 我试图在几个数组中查找项目的所有组合。数组的数量是随机的(可以是2、3、4、5 …)。每个数组中的元素数量也是随机的… 例如,我有3个数组: 我想生成一个具有3 x 3 x 2 = 18个组合的数组: A1,B1,C1 A1,B1,C2 A1,B2,C1 A1,B2,C2 A1,B3,C1 A1,B3,C2 A2,B1,C1 A2,B1,C2 … 问题是要创建一个具有可变数量的源数组的

  • 问题内容: 我有字典。 如何将的所有值提取到列表中? 问题答案: 如果你只需要字典的键,和使用:。 如果你只需要在字典中的值,和使用:。 如果您想同时使用键和值,请使用:返回一个元组列表。

  • 问题内容: 目前,我试图让所有可能的组合从的,是每一个元素只包含一个字母。 在本身包含相同字母两次甚至更多,他们只应该,因为他们经常会出现使用。 在稍后应该含有最多的给定的长度从最小的2个字母的所有组合。 我在此处搜索了stackoverflow,但只发现了忽略以下事实的置换函数:每个字母仅在出现时才经常使用。 这是我的第一个Swift 2项目,所以请原谅我的绿色态度:) 我想要的是 我目前的做法

  • 问题内容: 我想使用HiveQL创建一个n-gram列表。我的想法是使用带正则表达式和split函数的正则表达式-但这不起作用,但是: 输入是表格的一列 输出应该是: Hive中有一个n-gram udf,但是该函数直接计算n-gram的频率-我想改为列出所有n-gram的列表。 在此先多谢! 问题答案: 这可能不是最佳的解决方案,但却是可行的解决方案。用定界符分割句子(在我的示例中是一个或多个空

  • 问题内容: 我正在使用Python 2.7。 我有一个清单,我想要所有可能的有序组合。 这将给出以下输出: 但是我只希望输出是与列表相同顺序的组合。例如删除,,以及因为这些都不是正确的顺序相比列表。 我想通了用这个代替: 给我我想要的输出: 但是Python中是否有任何我想要的内置方法? 问题答案: 我相信您正在寻找的是原始列表中的所有可能 片段 。您所需的输出转换成切片是这样的: 因此,您应该尝