반응형
질문
다음 코드가 작동하도록 defaultdict(defaultdict(int))
를 가지는 방법이 있을까요?
for x in stuff:
d[x.a][x.b] += x.c_int
x.a
와 x.b
요소에 따라 d
를 ad-hoc로 구축해야 합니다.
다음과 같이 사용할 수 있습니다:
for x in stuff:
d[x.a,x.b] += x.c_int
하지만 그러면 다음을 사용할 수 없게 됩니다:
d.keys()
d[x.a].keys()
답변
예, 이렇게:
defaultdict(lambda: defaultdict(int))
defaultdict
의 인자(lambda: defaultdict(int)
)는 존재하지 않는 키에 액세스하려고 할 때 호출됩니다. 그 결과값은 이 키의 새로운 값으로 설정됩니다. 즉, 우리의 경우 d[Key_doesnt_exist]
의 값은 defaultdict(int)
가 됩니다.
이 마지막 defaultdict에서 키에 액세스하려고 한다면 즉, d[Key_doesnt_exist][Key_doesnt_exist]
, 0이 반환될 것입니다. 이는 마지막 defaultdict의 인자인 int()
의 반환값입니다.
반응형
댓글