2012-03-12 126 views
3

假設我有在Python 2所列出:的字典組合所有可能的排列出2所列出

keys = [1, 2, 3, 4, 5, 6] 

values = [7, 8, 9] 

我想所有排列出的2所列出

類似的:

d = [{1:7, 2:8, 3:9}, {1:8, 2:9, 3:7}, ....... ] 

我怎麼能做到這一點?

+1

你是怎麼想的結果呈現的?字典「d」的標準是什麼? – fraxel 2012-03-12 14:23:08

+0

爲什麼你想要一個字典列表? – Kimvais 2012-03-12 14:27:20

+0

感謝所有,DSM給我,我想 – 2012-03-12 15:50:58

回答

10

你的意思是這樣的嗎?

>>> import itertools 
>>> keys = [1, 2, 3, 4, 5, 6] 
>>> values = [7, 8, 9] 
>>> d = [dict(zip(kperm, values)) for kperm in itertools.permutations(keys, len(values))] 
>>> len(d) 
120 
>>> d[:10] 
[{1: 7, 2: 8, 3: 9}, {1: 7, 2: 8, 4: 9}, {1: 7, 2: 8, 5: 9}, {1: 7, 2: 8, 6: 9}, {1: 7, 2: 9, 3: 8}, {1: 7, 3: 8, 4: 9}, {1: 7, 3: 8, 5: 9}, {1: 7, 3: 8, 6: 9}, {1: 7, 2: 9, 4: 8}, {1: 7, 3: 9, 4: 8}] 
+0

謝謝,這是我想要的 – 2012-03-12 15:49:45

+0

所以我想知道....你有什麼打算與此有關呢? – 2012-03-12 16:40:30

+0

卡爾,我正在使用替代密碼,我試圖自己解密一個簡單的密碼,看看我能走多遠 這些密鑰代表英語中最常見的字符 這些值是密文中最常見的字符 我正在執行的解密函數需要一個由字典表示的關鍵字。 所以我試圖讓所有可能的字典,其中鍵是最常見的字符和值在密碼最常見的字符。 – 2012-03-12 17:52:33

4
>>>import itertools 
>>>list(itertools.product(*[[1, 2, 3, 4, 5, 6],[7, 8, 9]])) 
>>>[(1, 7), (1, 8), (1, 9), (2, 7), (2, 8), (2, 9), (3, 7), (3, 8), (3, 9), (4, 7), (4, 8), (4, 9), (5, 7), (5, 8), (5, 9), (6, 7), (6, 8), (6, 9)] 
+0

答案我沒有看到'dict'這裏... – juliomalegria 2012-03-12 14:23:40

+0

的類型的字典的列表,你可以做'[{K:V}爲K,V在itertools.product(* [鍵,值])]',但我真的沒有看到字典,這裏的點... – Kimvais 2012-03-12 14:29:39

+0

您可以只申請字典內對任何迭代。 – Marcin 2012-03-12 14:33:10