0

dict d1과 dict d2가 있다고 가정합니다. 이제 다음처럼, D2는 D1의 내부 튜플 - 키의 값 상상 :map() 함수를 사용하여 다른 사전의 튜플 키에 대한 사전 할당

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 루프를 사용하여 람다 식 내부에 아무 것도 할당 할 수 없다고 생각하면됩니까? 당신은 dict comprehension를 찾고 있습니다

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

당신이 원하는 당신이'd2' 모든 키를 공유 할 할, 또는하지 마십시오 * 별도의 새 * 값에 따라 사전? –

+0

사실, 별도의 하나. –

답변

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

놀라운. 고마워요! 나는 "사전 이해"와 같은 것의 존재에 대해서도 알지 못했다. 나는 그것이 단지 목록을위한 것이라고 생각했다. –

+1

@EricsonWillians : 설정된 이해력도 있습니다 (단지': value' 부분, {{iterable의 target_list에 대한 표현식}'). –