본문 바로가기
Python/Python FAQ

Python defaultdict의 defaultdict?, defaultdict of defaultdict?

by 베타코드 2023. 11. 3.
반응형

질문


다음 코드가 작동하도록 defaultdict(defaultdict(int))를 가지는 방법이 있을까요?

for x in stuff:
    d[x.a][x.b] += x.c_int

x.ax.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()의 반환값입니다.

반응형

댓글