본문 바로가기
파이썬

파이썬 defaultdict의 중첩 된 defaultdict

by º기록 2021. 1. 5.
반응형

defaultdict를 defaultdict의 기본값으로 만드는 방법이 있습니까? (즉, 무한 레벨 재귀 defaultdict?)

나는 할 수 있기를 원한다 :

x = defaultdict(...stuff...)
x[0][1][0]
{}

따라서 x = defaultdict (defaultdict) 를 수행 할 수 있지만 이는 두 번째 수준 일뿐입니다.

x[0]
{}
x[0][0]
KeyError: 0

이것을 할 수있는 레시피가 있습니다. 그러나 단순히 일반적인 defaultdict 인수를 사용하여 수행 할 수 있습니까?


아마도 bunch 패턴을 사용하게 될 것입니다.하지만이 방법을 모른다는 것을 깨달았을 때 관심을 갖게되었습니다.

 

해결 방법

 

임의 수의 레벨 :

def rec_dd():
    return defaultdict(rec_dd)

>>> x = rec_dd()
>>> x['a']['b']['c']['d']
defaultdict(<function rec_dd at 0x7f0dcef81500>, {})
>>> print json.dumps(x)
{"a": {"b": {"c": {"d": {}}}}}

물론 람다를 사용하여이 작업을 수행 할 수도 있지만 람다가 읽기 어려운 것으로 나타났습니다. 어쨌든 다음과 같이 보일 것입니다.

rec_dd = lambda: defaultdict(rec_dd)

 

참조 페이지 https://stackoverflow.com/questions/19189274

 

 

반응형

댓글