Получить все комбинации из двух разных словарей - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь получить всю комбинацию из двух словарей ниже, изменяя только первые два элемента значений, которые хранятся в качестве ключа. Также для информации каждое значение является предпочтением для этого ключа. Таким образом, в dic a каждый ключ имеет три предпочтения, а также в dic b каждый ключ имеет четыре предпочтения. Я просто пытаюсь получить все комбинации, меняя или меняя первые два параметра для ключей в обоих словарях.

a={"ad":["tau","guru","addha"],
"bigd":["tau","guru","addha"],
"lugd":["tau","guru","addha"],
"df":["addha","tau","guru"]}

b={"tau":["ad","bigd","lugd",'df'],
"guru":["bigd","ad",'df',"lugd"],
 "addha":["lugd",'df',"bigd","ad"]}

Таким образом, одна комбинация будет при изменении первых двух элементов в ["ad"], а остальные будут одинаковыми.

a={"ad":["guru","tau","addha"],
"bigd":["tau","guru","addha"],
"lugd":["tau","guru","addha"],
"df":["addha","tau","guru"]}

b={"tau":["ad","bigd","lugd",'df'],
"guru":["bigd","ad",'df',"lugd"],
 "addha":["lugd",'df',"bigd","ad"]}

Таким образом, получение всей комбинации только изменяя или меняя первые два предпочтения клавиш.

Мой код ниже -:

a={"ad":["tau","guru","addha"],
"bigd":["tau","guru","addha"],
"lugd":["tau","guru","addha"],
"df":["addha","tau","guru"]}

b={"tau":["ad","bigd","lugd",'df'],
"guru":["bigd","ad",'df',"lugd"],
 "addha":["lugd",'df',"bigd","ad"]}
from itertools import permutations, product

def permute_first2(a):
    b=[]
    permutes=list(list(p) for p in permutations(a[:2]))
    for i in permutes:
        b.append(i+a[2:])
    return b



length_a=len(a.keys())
length_b=len(b.keys())
items_a=list(a.keys())
items_b=list(b.keys())

a_variants = [dict(zip(items_a, values)) 
                 for values in product(permute_first2(items_b), repeat=3)]
b_variants = [dict(zip(items_b, values)) 
                 for values in product(permute_first2(items_a), repeat=3)]


all_variants = product(a_variants, b_variants)
for va, vb in all_variants:
    print("a:", va, "\nb:", vb, "\n")
...