创建一个空字典,其中键是可变维度的元组

时间:2014-12-10 16:35:34

标签: python dictionary

我获得了多个维度m以及每个维度n中的多个索引(所有维度都相同)。我想构建一个字典,其中包含维度m的所有可能元组,索引从0n作为键,[]作为值。例如,如果m = 2n = 3我会得到

{(0, 1): [], (1, 2): [], (0, 0): [], 
 (2, 1): [], (1, 1): [], (2, 0): [], 
 (2, 2): [], (1, 0): [], (0, 2): []}

我想知道如何在没有循环的情况下以简洁的方式执行此操作,并将m作为变量。

2 个答案:

答案 0 :(得分:3)

您可以使用itertools.product

>>> from itertools import product
>>> def comb(m,n):
...  return  {i:[] for i in product(range(n),repeat=m)}
... 
>>> comb(2,3)
{(0, 1): [], (1, 2): [], (0, 0): [], (2, 1): [], (1, 1): [], (2, 0): [], (2, 2): [], (1, 0): [], (0, 2): []}

答案 1 :(得分:1)

您可以使用dict构造函数和itertools.product

dict((x, []) for x in itertools.product(range(n), repeat=m))

结果:

In [4]: dict((x, []) for x in itertools.product(range(3), repeat=2))
Out[4]: 
{(0, 0): [],
 (0, 1): [],
 (0, 2): [],
 (1, 0): [],
 (1, 1): [],
 (1, 2): [],
 (2, 0): [],
 (2, 1): [],
 (2, 2): []}
编辑:所以我注意到我已经迟到了一分钟,答案基本上等于@Kasra's,所以我会添加一些内容,以免让它完全没用:

他使用的词典理解它只支持Python 2.7+,而我使用的dict构造函数也适用于python 2.6,可能之前。另一方面,使用字典理解速度要快一些:

In [12]: %timeit dict((x, []) for x in itertools.product(range(10), repeat=5))
10 loops, best of 3: 35.7 ms per loop
In [13]: %timeit {i: [] for i in itertools.product(range(10), repeat=5)}
10 loops, best of 3: 31.8 ms per loop