0

辞書 d1 と辞書 d2 があるとします。ここで、次のように、d2 が d1 内のタプルキーの値であるとします。

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): {}}

ここで質問が来ます:

ラムダ式内で何も割り当てることができないことを考えると、for ループを使用せずにそれを行うにはどうすればよいですか? どうすればこのようなことができますか:

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

1 に答える 1

3

あなたは辞書の理解を探しています:

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 に答える