2016-08-02 18 views
6

Tôi muốn tạo ra tất cả các kết hợp của các giá trị đó là trong danh sách đánh chỉ mục trong một dict, như vậy:Python: tạo ra tất cả sự kết hợp từ các giá trị trong dict danh sách

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

Mỗi lần, một mục của mỗi dict entry sẽ được chọn và kết hợp để các mục từ khóa khác, vì vậy chúng ta có thể có:

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

tôi biết có một cái gì đó để tạo ra sự kết hợp của các mục trong danh sách trong itertools nhưng tôi không nghĩ rằng tôi có thể sử dụng nó ở đây vì tôi có các "giá trị" khác nhau.

Có giải pháp hiện có nào để thực hiện việc này hay không hoặc làm cách nào để tôi tự thực hiện, tôi khá mắc kẹt với cấu trúc lồng nhau này.

+2

Sau đó, bạn nên cố gắng viết mã để làm như vậy, và quay trở lại nếu bạn có vấn đề. –

+0

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

+2

từ điển không được đặt hàng! vui lòng làm rõ. –

Trả lời

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)) 

mà in

[('D', 'F', 'tô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')]

Các vấn đề liên quan