繁体   English   中英

字典不同键的元素组合

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM