ibi*_*tux 12 python combinations dictionary
我想生成在dict中索引的列表中的所有值组合,如下所示:
{'A':['D','E'],'B':['F','G','H'],'C':['I','J']}
Run Code Online (Sandbox Code Playgroud)
每次,每个字典条目中的一个项目将被挑选并组合到其他键的项目,因此我们可以:
['D','F','I']
['D','F','J']
['D','G','I']
['D','G','J']
['D','H','I']
...
['E','H','J']
Run Code Online (Sandbox Code Playgroud)
我知道有一些东西可以在itertools中生成列表中的项目组合,但我不认为我可以在这里使用它,因为我有不同的"池"值.
有没有现成的解决方案,或者我应该如何继续自己做,我很坚持这个嵌套的结构.
Pab*_*blo 29
如果你想保持key:value排列,你可以使用:
import itertools
keys, values = zip(*my_dict.items())
permutations_dicts = [dict(zip(keys, v)) for v in itertools.product(*values)]
Run Code Online (Sandbox Code Playgroud)
这将为您提供具有排列的字典列表:
print(permutations_dicts)
[{'A':'D', 'B':'F', 'C':'I'},
{'A':'D', 'B':'F', 'C':'J'},
...
]
Run Code Online (Sandbox Code Playgroud)
disclaimer 不完全是 OP 的要求,但谷歌把我送到这里寻找。
小智 28
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))
Run Code Online (Sandbox Code Playgroud)
打印
[('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', '我'),('E','H','J')]
如何使用 scikit-learn 中的 ParameterGrid?它创建了一个生成器,您可以在正常的 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"])
Run Code Online (Sandbox Code Playgroud)