2012-03-12 156 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