首先,如果你必须使用字典,为什么不创建一个单一的字典,使用元组索引它呢?二,使用itertools.product
避免麻烦的嵌套循环:
>>> import itertools
>>> d = {}
>>> for tup in itertools.product(range(5), repeat=2):
... d[tup] = tup
...
>>> d
{(1, 3): (1, 3), (3, 0): (3, 0), (2, 1): (2, 1), (0, 3): (0, 3), (4, 0): (4, 0),
(1, 2): (1, 2), (3, 3): (3, 3), (4, 4): (4, 4), (2, 2): (2, 2), (4, 1): (4, 1),
(1, 1): (1, 1), (3, 2): (3, 2), (0, 0): (0, 0), (0, 4): (0, 4), (1, 4): (1, 4),
(2, 3): (2, 3), (4, 2): (4, 2), (1, 0): (1, 0), (0, 1): (0, 1), (3, 1): (3, 1),
(2, 4): (2, 4), (2, 0): (2, 0), (4, 3): (4, 3), (3, 4): (3, 4), (0, 2): (0, 2)}
然而,可能会有更好的方式来创建一个稀疏数组。 scipy
提供sparse matrices,但我相信它们只是2-d。
这里有一些其他的使用模式可能对您有用:
>>> for tup in itertools.product(range(5), repeat=2):
... if tup[0] == tup[1]:
... d[tup] = tup
...
>>> d
{(3, 3): (3, 3), (0, 0): (0, 0), (1, 1): (1, 1), (4, 4): (4, 4), (2, 2): (2, 2)}
>>> for tup in itertools.product(range(5), range(2)):
... print d.get(tup)
...
(0, 0)
None
None
(1, 1)
None
None
None
None
None
None
要斜少,这里是你将如何保持一个变量不变:只是传递一个项目顺序itertools.product
:
>>> for tup in itertools.product(range(3), [2], range(3)):
... print tup
...
(0, 2, 0)
(0, 2, 1)
(0, 2, 2)
(1, 2, 0)
(1, 2, 1)
(1, 2, 2)
(2, 2, 0)
(2, 2, 1)
(2, 2, 2)
你可以通过参数的元组来存储它,所以你做'次[A,B,C,D,E,F]' – 2012-02-26 15:14:38
@Thomas:用元组字典我不能修复一些变量和迭代其他:'for n in times [v]:print(times [v] [n] [m] [b] [p] [c])' – peoro 2012-02-26 15:19:47