2016-08-02 36 views
6

Chciałbym wygenerować wszystkie kombinacje wartości, które są na listach indeksowanych w dict, tak:Python: generowanie wszystkich kombinacji z wartościami w dict list

{'A':['D','E'],'B':['F','G','H'],'C':['I','J']} 

Każdorazowo jeden element każdego dict wpis byłyby zbierane i łączone elementy z innymi klawiszami, więc możemy mieć:

['D','F','I'] 
['D','F','J'] 
['D','G','I'] 
['D','G','J'] 
['D','H','I'] 
... 
['E','H','J'] 

wiem, że jest coś do generowania kombinacje elementów w liście w itertools ale nie sądzę, mogę go używać tutaj ponieważ mam różne "pule" wartości.

Czy istnieje rozwiązanie tego problemu lub jak powinienem to zrobić sam, utknąłem w tej strukturze zagnieżdżonej.

+2

Następnie należy spróbować napisać kod, aby to zrobić, i wróć, jeśli masz problemy. –

+0

'itertools.product (* yourdict.values ​​())' – Phillip

+2

Słowniki nie są zamawiane! proszę o wyjaśnienie. –

Odpowiedz

12
import itertools as it 

my_dict={'A':['D','E'],'B':['F','G','H'],'C':['I','J']} 
allNames = sorted(my_dict) 
combinations = it.product(*(my_dict[Name] for Name in allNames)) 
print(list(combinations)) 

drukowany

[('D', 'C', 'I'), ('D', 'F', 'j') ('D', " G "," I "), (" D "," G "," J "), (" D "," H "," I "), (" D "," H "," J "), ("E", "F", "I"), ("E", "F", "J"), ("E", "G", "I"), ("E", "G" , "J"), ("E", "H", "I"), ("E", "H", "J")]