Как мне создать перестановки каждого ключа из словаря? - PullRequest
1 голос
/ 21 марта 2020

Скажем, у меня есть словарь букв с присвоенными значениями:

  dictionary = {"l":"smias", "k":"swdw", 'm':'blala'}

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

  mytuple = ((l,k),(l,m),(k,m))

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Вы можете попробовать это без использования библиотек.

def combinations(lst, length, idx, cur, res):
    # length: length of each item in combinations
    if length == 0:
        res.append(tuple(cur))
        return
    for i in range(idx, len(lst)):
        combinations(lst, length - 1, i + 1, cur + [lst[i]], res)

res = []
dictionary = {"l":"smias", "k":"swdw", 'm':'blala'}
combinations(list(dictionary.keys()), 2, 0, [], res)
mytuple = tuple(res)
# (('l', 'k'), ('l', 'm'), ('k', 'm'))
1 голос
/ 21 марта 2020

Ваш пример - комбинации, а не перестановки. Вы можете получить либо с itertools :

from itertools import combinations

d = {"l":"smias", "k":"swdw", 'm':'blala'}

tuple(combinations(d, r=2))
# (('l', 'k'), ('l', 'm'), ('k', 'm'))

, либо с перестановками:

from itertools import permutations

d = {"l":"smias", "k":"swdw", 'm':'blala'}

tuple(permutations(d, r=2))
# (('l', 'k'), ('l', 'm'), ('k', 'l'), ('k', 'm'), ('m', 'l'), ('m', 'k'))
...