[PYTHON] 파이썬 : defaultdict의 defaultdict?
PYTHON파이썬 : defaultdict의 defaultdict?
다음 코드를 작동 시키려면 defaultdict (defaultdict (int))를 사용하는 방법이 있습니까?
for x in stuff:
d[x.a][x.b] += x.c_int
d는 x.a 및 x.b 요소에 따라 임시로 구축해야합니다.
나는 다음을 사용할 수있다.
for x in stuff:
d[x.a,x.b] += x.c_int
하지만 그때 나는 사용할 수 없을 것이다.
d.keys()
d[x.a].keys()
해결법
-
==============================
1.예, 이렇게 :
예, 이렇게 :
defaultdict(lambda: defaultdict(int))
defaultdict (이 경우 lambda : defaultdict (int))의 인수는 존재하지 않는 키에 액세스하려고 할 때 호출됩니다. 이것의 반환 값은이 키의 새로운 값으로 설정됩니다. 즉, 우리의 경우 d [Key_doesnt_exist] 값은 defaultdict (int)가됩니다.
이 마지막 defaultdict에서 키에 액세스하려고하면 d [Key_doesnt_exist] [Key_doesnt_exist]는 마지막 defaultdict 즉 int () 인수의 반환 값인 0을 반환합니다.
-
==============================
2.defaultdict 생성자에 대한 매개 변수는 새 요소를 작성하기 위해 호출되는 함수입니다. 그래서 람다를 사용합시다!
defaultdict 생성자에 대한 매개 변수는 새 요소를 작성하기 위해 호출되는 함수입니다. 그래서 람다를 사용합시다!
>>> from collections import defaultdict >>> d = defaultdict(lambda : defaultdict(int)) >>> print d[0] defaultdict(<type 'int'>, {}) >>> print d[0]["x"] 0
Python 2.7부터 카운터를 사용하는 더 나은 솔루션이 있습니다.
>>> from collections import Counter >>> c = Counter() >>> c["goodbye"]+=1 >>> c["and thank you"]=42 >>> c["for the fish"]-=5 >>> c Counter({'and thank you': 42, 'goodbye': 1, 'for the fish': -5})
일부 보너스 기능
>>> c.most_common()[:2] [('and thank you', 42), ('goodbye', 1)]
자세한 내용은 PyMOTW - Collections - 컨테이너 데이터 유형 및 Python Documentation - collections를 참조하십시오.
-
==============================
3.부분적으로 사용하는 것이 약간 더 우아합니다.
부분적으로 사용하는 것이 약간 더 우아합니다.
import functools dd_int = functools.partial(defaultdict, int) defaultdict(dd_int)
물론 이것은 람다와 같습니다.
-
==============================
4.다른 사람들은 다음을 올바르게 수행하는 방법에 대한 귀하의 질문에 정확하게 대답했습니다.
다른 사람들은 다음을 올바르게 수행하는 방법에 대한 귀하의 질문에 정확하게 대답했습니다.
for x in stuff: d[x.a][x.b] += x.c_int
또 다른 방법은 키에 튜플을 사용하는 것입니다.
d = defaultdict(int) for x in stuff: d[x.a,x.b] += x.c_int # ^^^^^^^ tuple key
이 방법의 좋은 점은 간단하고 쉽게 확장 할 수 있다는 것입니다. 3 단계의 매핑이 필요하다면 키에 3 개의 항목 튜플을 사용하십시오.
from https://stackoverflow.com/questions/5029934/python-defaultdict-of-defaultdict by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 스크립트에서 암호 숨김 (안전하지 않은 난독 화만) (0) | 2018.10.09 |
---|---|
[PYTHON] 평평한 함수와 래벨 함수의 차이점은 무엇입니까? (0) | 2018.10.09 |
[PYTHON] 히스토그램 Matplotlib (0) | 2018.10.09 |
[PYTHON] Flask-SQLAlchemy 가져 오기 / 컨텍스트 문제 (0) | 2018.10.09 |
[PYTHON] Django ModelForm - 다 대다 필드 (0) | 2018.10.09 |