Генерация всех возможных диктатов из существующего в терминах ценностей - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть словарь

kwarg = {'a': 0 , 'b': 1 , 'c': 2}, и я хочу создать все возможные альтернативные словари в терминах значений, таких как:

x1={'a': 1 , 'b': 0 , 'c':2}

x2={'a': 1 , 'b': 2 , 'c':0}

x3={'a': 0 , 'b': 2 , 'c':1}

x4={'a': 0 , 'b': 1 , 'c':2}

x5={'a': 2 , 'b': 1 , 'c':0}

x6={'a': 2 , 'b': 0 , 'c':1}

, но у меня есть 6 элементов (0,1,2,3,4,5) и нужно использовать алгоритм Python.

Ответы [ 3 ]

0 голосов
/ 18 ноября 2018

Означает ли python algorithm, что вы не можете использовать какую-либо предопределенную функцию / модуль? Если да, следующий код может быть хорошим или обеспечить хорошую отправную точку:

possibilites = [0, 1, 2, 3, 4, 5]

lstOfDicts = []
for a in possibilites:
    for b in possibilites:
        for c in possibilites:
            lstOfDicts.append({"a" : a, "b" : b, "c" : c})

print(lstOfDicts)
0 голосов
/ 18 ноября 2018

Это будет мой взгляд, более читаемый и простой:

import itertools
kwarg = {'a': 0 , 'b': 1 , 'c': 2}
val=list(kwarg.values())
new=list(itertools.permutations(val))
d=dict()
for i in range(0,len(new)):
    for j in range(0,len(new[i])):
        if j==0:
            d['a']=new[i][j]
        if j==1:
            d['b']=new[i][j]
        if j==2:
            d['c']=new[i][j]
    print(d)
0 голосов
/ 18 ноября 2018

Следующий код в python3 должен сделать

import itertools


def main():
    '''The Main'''

    kwarg = {'a': 0 , 'b': 1 , 'c': 2}
    keys = kwarg.keys()
    for comb in itertools.permutations(kwarg.values()):
        print(dict(zip(keys, comb)))



if __name__ == '__main__':
    main()
...