에듀테크 프로젝트 대시보드
collections 모듈
표준 컨테이너를 보완하는 특수 자료구조들.
from collections import Counter
c = Counter("banana")
# Counter({'a': 3, 'n': 2, 'b': 1})
c["a"] # => 3
c["z"] # => 0 (KeyError 없음)
c.most_common(2) # => [('a', 3), ('n', 2)]
c.total() # => 6 (3.10+)
Counter([1, 1, 2]) + Counter([1, 3]) # => Counter({1: 3, 2: 1, 3: 1})from collections import defaultdict
groups = defaultdict(list)
for word in ["apple", "avocado", "banana"]:
groups[word[0]].append(word) # 키 없어도 [] 자동 생성
# {'a': ['apple', 'avocado'], 'b': ['banana']}
counts = defaultdict(int)
for ch in "banana":
counts[ch] += 1
nested = defaultdict(lambda: defaultdict(int))from collections import deque
q = deque([1, 2, 3])
q.append(4) # 오른쪽 추가
q.appendleft(0) # 왼쪽 추가 => deque([0, 1, 2, 3, 4])
q.pop() # 오른쪽 제거
q.popleft() # 왼쪽 제거 — list 와 달리 O(1)
# 최근 N개만 유지
recent = deque(maxlen=3)
for x in range(5):
recent.append(x) # => deque([2, 3, 4], maxlen=3)
q.rotate(1) # 회전pop(0) / insert(0, x) 는 O(n) — 큐로 쓰면 느림from collections import namedtuple
Color = namedtuple("Color", "r g b") # 공백 구분도 OK
white = Color(255, 255, 255)
white.r # => 255
r, g, b = white # 언패킹
white._asdict() # => {'r': 255, 'g': 255, 'b': 255}from collections import OrderedDict, ChainMap
# 일반 dict 도 3.7+ 는 순서 유지 → OrderedDict 는 move_to_end 등이 필요할 때만
od = OrderedDict.fromkeys("abc")
od.move_to_end("a") # => c b a
# ChainMap — 여러 dict 를 하나처럼 (앞이 우선), 설정 병합에 유용
defaults = {"color": "red", "size": "M"}
user = {"color": "blue"}
cfg = ChainMap(user, defaults)
cfg["color"] # => 'blue'
cfg["size"] # => 'M'