所以我有一个索引键的字典如下:
' 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
但我只需要唯一的值,像上面的示例一样滑动字符串,我该怎么做?
答案 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)
会很好,因为字典上的迭代也会生成密钥。