defaultdict
"표준 사전에는 값을 검색하고 값이 존재하지 않는 경우 기본값을 설정하기위한 setdefault () 메소드가 포함되어 있습니다. 반대로, defaultdict
컨테이너가 초기화 될 때 호출자가 기본값 (반환 될 값)을 지정할 수있게합니다."
예제로 파이썬 표준 라이브러리 에서 Doug Hellmann이 정의한대로
defaultdict를 사용하는 방법
defaultdict 가져 오기
>>> from collections import defaultdict
defaultdict를 초기화하십시오
전달하여 초기화
첫 번째 인수로 호출 가능 (필수)
>>> d_int = defaultdict(int)
>>> d_list = defaultdict(list)
>>> def foo():
... return 'default value'
...
>>> d_foo = defaultdict(foo)
>>> d_int
defaultdict(<type 'int'>, {})
>>> d_list
defaultdict(<type 'list'>, {})
>>> d_foo
defaultdict(<function foo at 0x7f34a0a69578>, {})
** 두 번째 인수로 kwargs (선택 사항)
>>> d_int = defaultdict(int, a=10, b=12, c=13)
>>> d_int
defaultdict(<type 'int'>, {'a': 10, 'c': 13, 'b': 12})
또는
>>> kwargs = {'a':10,'b':12,'c':13}
>>> d_int = defaultdict(int, **kwargs)
>>> d_int
defaultdict(<type 'int'>, {'a': 10, 'c': 13, 'b': 12})
작동 원리
표준 사전의 하위 클래스와 마찬가지로 동일한 기능을 모두 수행 할 수 있습니다.
그러나 알 수없는 키를 전달하면 오류 대신 기본값을 반환합니다. 예를 들어 :
>>> d_int['a']
10
>>> d_int['d']
0
>>> d_int
defaultdict(<type 'int'>, {'a': 10, 'c': 13, 'b': 12, 'd': 0})
기본값을 변경하려면 default_factory를 덮어 씁니다.
>>> d_int.default_factory = lambda: 1
>>> d_int['e']
1
>>> d_int
defaultdict(<function <lambda> at 0x7f34a0a91578>, {'a': 10, 'c': 13, 'b': 12, 'e': 1, 'd': 0})
또는
>>> def foo():
... return 2
>>> d_int.default_factory = foo
>>> d_int['f']
2
>>> d_int
defaultdict(<function foo at 0x7f34a0a0a140>, {'a': 10, 'c': 13, 'b': 12, 'e': 1, 'd': 0, 'f': 2})
문제의 예
실시 예 1
int가 default_factory로 전달되었으므로 알 수없는 키는 기본적으로 0을 반환합니다.
이제 문자열이 루프에 전달되면 d에서 해당 알파벳의 수가 증가합니다.
>>> s = 'mississippi'
>>> d = defaultdict(int)
>>> d.default_factory
<type 'int'>
>>> for k in s:
... d[k] += 1
>>> d.items()
[('i', 4), ('p', 2), ('s', 4), ('m', 1)]
>>> d
defaultdict(<type 'int'>, {'i': 4, 'p': 2, 's': 4, 'm': 1})
실시 예 2
목록이 default_factory로 전달되었으므로 알 수없는 (존재하지 않은) 키는 기본적으로 [] (즉, 목록)을 반환합니다.
이제 튜플 목록이 루프에 전달되면 d [color]에 값이 추가됩니다.
>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> d.default_factory
<type 'list'>
>>> for k, v in s:
... d[k].append(v)
>>> d.items()
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
>>> d
defaultdict(<type 'list'>, {'blue': [2, 4], 'red': [1], 'yellow': [1, 3]})
default_factory = None
. 이 질문을 참조하십시오 .