首先,如果你必須使用字典,爲什麼不創建一個單一的字典,使用元組索引它呢?二,使用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