Skip to content

collections Overview

The collections module provides specialized container types that extend Python's built-in list, dict, tuple, and set.


Why Use collections?

Built-in types are versatile, but specialized containers offer:

  • Cleaner code: Less boilerplate for common patterns
  • Better performance: Optimized for specific use cases
  • Safer defaults: Avoid common pitfalls (e.g., KeyError)

Available Types

Type Description Replaces
namedtuple Tuple with named fields Plain tuple, simple class
defaultdict Dict with default factory Dict + setdefault()
Counter Dict for counting Dict + manual counting
deque Double-ended queue List (for queue operations)
OrderedDict Dict with ordering features Dict (mostly)
ChainMap Multiple dicts as one view Manual dict merging

Quick Comparison

Without collections

# Counting
counts = {}
for item in items:
    if item not in counts:
        counts[item] = 0
    counts[item] += 1

# Grouping
groups = {}
for item in items:
    key = get_key(item)
    if key not in groups:
        groups[key] = []
    groups[key].append(item)

# Queue operations (slow!)
queue = []
queue.append(item)      # O(1)
queue.pop(0)            # O(n) - shifts all elements

With collections

from collections import Counter, defaultdict, deque

# Counting
counts = Counter(items)

# Grouping
groups = defaultdict(list)
for item in items:
    groups[get_key(item)].append(item)

# Queue operations (fast!)
queue = deque()
queue.append(item)      # O(1)
queue.popleft()         # O(1)

Import Patterns

# Import specific types
from collections import namedtuple, defaultdict, Counter, deque

# Or import module
import collections
d = collections.defaultdict(list)

When to Use Each

Use Case Type
Lightweight record/struct namedtuple
Grouping items by key defaultdict(list)
Counting occurrences Counter
Queue / BFS / sliding window deque
LRU cache implementation OrderedDict
Config layering ChainMap

Summary

The collections module is essential for writing clean, efficient Python code. Master these types to avoid reinventing common patterns.