[英]Combinations of elements at various keys of a dict
我有一个 python dict,它有各种键,例如dict.keys()=[1,2,3]
并且每个键都包含一个可能不同大小的数组,例如dict[1] = [1,3,6], dict[2] = ['a', 'b'] dict[3] = [x]
。 我想要一个新数组,从中获取每个 arrays 中n
元素的所有可能组合。
例如,如果事先提供了 arrays,
arr_1 = itertools.combinations(dict[1],n)
arr_2 = itertools.combinations(dict[2],n)
arr_3 = itertools.combinations(dict[3],n)
最后,
final = itertools.product(arr_1, arr_2, arr_3)
在我没有字典键和数组大小的情况下,如何创建final
数组?
如果我理解正确
itertools.product(*[itertools.combinations(v, min(n, len(v)) for v in dic.values()])
应该做的伎俩。
编辑:调整 w.r.t。 注释。
你的问题有点粗略。 如果你问,当你需要动态地确定字典键和值时,如何动态地形成最终数组,你可以这样做:
def combo_dist(dict): # <--- dict is your starting dictionary
array = []
for v in dict.values(): # <--- all values from your dict
arrays.append(itertools.combination(v,len(v)))
# now array should be populated and you can make your final product:
final = itertools.product(*array)
return final
# now call this function:
final_array = combo_dict(your_dict)
现在,如果我理解正确的话,这是算法的拼写版本。 你实际上可以用列表理解来做一个单行:
final_array = itertools.product(*[itertools.combinations(v, len(v)) for v in your_dict.values()])
但请注意,这里的值顺序不是确定性的。 您可能还想在其中一个步骤中使用sorted() 。 取决于您的需要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.