Remarks
이 글은 전문가를 위한 파이썬(Fluent Python)을 정리한 자료입니다.
3.4 융통성 있게 키를 조회하는 매핑
3.4.1 defaultdict
: 존재하지 않는 키에 대한 또 다른 처리
1
2
3
4
5
6
from collections import defaultdict
dic = defaultdict(list) # int
dic[0] # {0: []}
dic['1'] # {0: [], '1': []}
- 매핑형은
__missing__()
을 통해 존재하지 않는 키를 처리한다.
3.5 그 외 매핑형
-
collections.OrderedDict
키를 삽입한 순서대로 유지함으로써 항목을 반복하는 순서를 예측할 수 있다. -
collections.ChainMap
매핑들의 목록을 담고 있으며 한꺼번에 모두 검색할 수 있다. 각 매핑을 차례대로 검색하고, 그중 하나에서라도 키가 검색되면 성공한다.import buildins pylookup = ChainMap(locals(), globals(), vars(builtins))
-
collections.Counter
모든 키에 정수형 카운터를 갖고 있는 매핑. 기존 키를 갱신하면 카운터가 늘어난다.ct = collections.Counter('abracadabra') ct # Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}) ct.update('aaaaazzz') ct # Counter({'a': 10, 'z': 3, 'b': 2, 'r': 2, 'c': 1, 'd': 1}) ct.most_common(2) # [('a', 10), ('z', 3)] ct['a'] # 10
3.6 UserDict
상속하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from collections import UserDict
class StrKeyDict(UserDict):
def __missing__(self, key):
if isinstance(key, str):
raise KeyError(key)
return self[str(key)]
def __contains__(self, key):
return str(key) in self.data
def __setitem__(self, key, item):
self.data[str(key)] = item
3.7 불변 매핑
1
2
3
4
5
6
7
8
9
10
from types import MappingProxyType
d = {1: 'A'}
d_proxy = MappingProxyType(d)
d_proxy # {1: 'A'}
d_proxy[2] = 'x' # raise error
d[2] = 'B'
d_proxy # {1: 'A', 2: 'B'}
PREVIOUSEtc