从2个单独列表的所有可能组合创建dict

时间:2011-09-12 19:20:13

标签: python python-2.x

我在互联网系列管中找到了这个有用的代码:

x=[1,2,3,4]
y=[1,2,3,4]
combos=[(`i`+`n`) for i in x for n in y]
combos
['11','12','13','14','21','22','23','24','31','32','33','34','41','42','43','44']

我正在尝试做的事情如下:

combinations={(i: `n`+`d`) for i in range(16) for n in x for d in y}
combinations
{1: '11', 2: '12', 3: '13', 4: '14', 5: '21', 6: '22'...etc}

但显然这不起作用。可以这样做吗?如果是这样,怎么样?

4 个答案:

答案 0 :(得分:6)

combos = [str(i) + str(n) for i in x for n in y] # or `i`+`n`, () for a generator
combinations = dict((i+1,c) for i,c in enumerate(combos))
# Only in Python 2.6 and newer:
combinations = dict(enumerate(combos, 1))
# Only in Python 2.7 and newer:
combinations = {i+1:c for i,c in enumerate(combos)}

答案 1 :(得分:1)

你......可能......不想那样。至少,我看不到需要它的理由。如果你所追求的是能够跟踪他们的位置,你希望结果是一个列表,它已经是。如果你需要知道索引,你应该这样做:

for idx, combo in enumerate(combinations):
  print idx+1, combo

如果您确实需要按位置(以及列表索引+ 1)访问它们,您可以执行以下操作:

lookup = dict((idx+1, combo) for idx, combo in enumerate(combinations))

答案 2 :(得分:0)

从第一个例子开始:

x=[1,2,3,4]
y=[1,2,3,4]
combos=[(`i`+`n`) for i in x for n in y]

然后添加:

combinations = {i: c for i, c in enumerate(combos)}

答案 3 :(得分:0)

此外,itertools模块中有一个product函数可以在这里使用

from itertools import product
x=[1,2,3,4]
y=[1,2,3,4]

combs = {i+1: ''.join(map(str,p)) for i,p in enumerate(product(x,y))}

''.join(map(str,p))是将ptuple int-s)的所有项目转换为str然后使用{''.join(...)加入它们的代码1}}。如果您不需要,请离开p而不是此代码。

另请注意,语法{j for j in js}仅适用于Python 2.7