Избегайте дублирования при использовании комбинаций itertools - python - PullRequest
0 голосов
/ 25 апреля 2018

Итак, у меня словарь с индексными ключами выглядит так:

'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 голосов
/ 25 апреля 2018

У вас нет проблем, itertools.combinations() создает уникальные комбинации в любом порядке , точно так, как вы уже хотели.Из документации :

Элементы рассматриваются как уникальные в зависимости от их положения, а не от их стоимости.Поэтому, если входные элементы уникальны, повторных значений в каждой комбинации не будет.

и приведенный пример исходного кода:

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

Обратите внимание, что * 1015 нет*, поскольку AB уже сгенерировано.

Конкретно, для вашего примера:

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

Производится только '0199', '9901' никогда не будет произведено.

Примечание: вам не нужно звонить dict.keys() при сортировке ключей.sorted(KEY_DICT) будет хорошо, так как итерация по словарю также дает ключи.

...