Advanced Collections
namedtuple, deque, ChainMap, and collection patterns.
Overview
Master advanced collection types.
namedtuple
from collections import namedtuple
# Create namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p.x, p.y) # 1 2
# With defaults
Point = namedtuple('Point', ['x', 'y'], defaults=[0, 0])
p = Point(1)
print(p) # Point(x=1, y=0)
# Replace fields
p2 = p._replace(y=5)
print(p2) # Point(x=1, y=5)
deque
from collections import deque
# Double-ended queue
dq = deque([1, 2, 3])
dq.append(4) # Add to right
dq.appendleft(0) # Add to left
print(dq) # deque([0, 1, 2, 3, 4])
dq.pop() # Remove from right
dq.popleft() # Remove from left
print(dq) # deque([1, 2, 3])
# Rotate
dq.rotate(1)
print(dq) # deque([3, 1, 2])
# Fixed size
dq = deque(maxlen=3)
dq.extend([1, 2, 3, 4, 5])
print(dq) # deque([3, 4, 5])
ChainMap
from collections import ChainMap
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
chain = ChainMap(dict1, dict2)
print(chain['a']) # 1
print(chain['b']) # 2 (from dict1, first in chain)
print(chain['c']) # 4
Practice
Implement a priority queue using collections.