0

假设我们有一个 dict d1 和一个 dict d2。现在,假设 d2 是 d1 中的 tuple-keys 的值,如下所示:

d1 = {}
d2 = {}

for i in range(4):
    for j in range(4):
        d1[(j,i)] = d2

print d1

输出:

{(0, 1): {}, (1, 2): {}, (3, 2): {}, (0, 0): {}, (3, 3): {}, (3, 0): {}, (3, 1): {}, (2, 1): {}, (0, 2): {}, (2, 0): {}, (1, 3): {}, (2, 3): {}, (2, 2): {}, (1, 0): {}, (0, 3): {}, (1, 1): {}}

现在问题来了:

考虑到我无法在 lambda 表达式中分配任何内容,我该如何在不使用 for 循环的情况下做到这一点?我该怎么做这样的事情:

map((lambda x: x =¹ "t"),[(j,i) for j in range(16) for i in range(16)]) # ¹: Inadmissible syntax.
4

1 回答 1

3

您正在寻找dict 理解

d1 = {(i, j): {} for i in range(4) for j in range(4)}

此外,您可以使用itertools.product()在单个循环中生成索引:

from itertools import product

d1 = {(i, j): {} for i, j in product(range(4), repeat=2)}

这两个表达式都创建了单独的嵌套字典;key: value每次循环迭代都会评估表达式。

演示:

>>> {(i, j): {} for i in range(4) for j in range(4)}
{(0, 1): {}, (1, 2): {}, (3, 2): {}, (0, 0): {}, (3, 3): {}, (3, 0): {}, (3, 1): {}, (2, 1): {}, (0, 2): {}, (2, 0): {}, (1, 3): {}, (2, 3): {}, (2, 2): {}, (1, 0): {}, (0, 3): {}, (1, 1): {}}
>>> from itertools import product
>>> {(i, j): {} for i, j in product(range(4), repeat=2)}
{(0, 1): {}, (1, 2): {}, (3, 2): {}, (0, 0): {}, (3, 3): {}, (3, 0): {}, (3, 1): {}, (2, 1): {}, (0, 2): {}, (2, 0): {}, (1, 3): {}, (2, 3): {}, (2, 2): {}, (1, 0): {}, (0, 3): {}, (1, 1): {}}
于 2014-05-23T20:43:25.903 回答