使用itertools组合时避免重复 - python

时间:2018-04-25 09:06:54

标签: python dictionary combinations permutation

所以我有一个索引键的字典如下:

' 00' :' Value1'

' 01' :' value2'

.....

' 99' :'价值100'

我试图通过使用以下方法获得所有可能的键值组合:

        for i in range(2, 7):
        for x in combinations(sorted(KEY_DICT.keys()), i):
            code = ''
            value = ''
            for k in x:
                code += k
                value += f'{KEY_DICT[k]}, '
            dic = {code: value}
            comb_dict_list.append(dic)
            pprint(comb_dict_list)

但是有一个问题,它会创建像

这样的重复项

0199

9901

但我只需要唯一的值,像上面的示例一样滑动字符串,我该怎么做?

1 个答案:

答案 0 :(得分:1)

您没有遇到任何问题,itertools.combinations()会在任何或相应的中生成唯一的组合,完全按照您的需要。来自documentation

  

元素根据其位置而不是其价值被视为唯一。因此,如果输入元素是唯一的,则每个组合中都不会有重复值。

和给出的源代码示例:

# combinations('ABCD', 2) --> AB AC AD BC BD CD

请注意,没有BA,因为已生成AB

具体而言,就你的例子而言:

>>> from itertools import combinations
>>> [''.join(combo) for combo in combinations(['01', '99'], 2)]
['0199']

仅生成'0199',永远不会生成'9901'

作为旁注,您在排序键时无需调用dict.keys()sorted(KEY_DICT)会很好,因为字典上的迭代也会生成密钥。