Day 32/100: Working with the collections Module in Python
 Rahul Gupta

Rahul Gupta @therahul_gupta

About: I am Software Engineer

Joined:
Jun 5, 2022

Day 32/100: Working with the collections Module in Python

Publish Date: Jul 19
1 0

Welcome to Day 32 of our Python journey!
Today, we explore the collections module — a treasure chest of powerful, high-performance data structures beyond standard dict, list, tuple, and set.

Let’s unpack the most useful tools in this module with simple explanations and examples. 🧠


📦 What is the collections Module?

The collections module is a built-in Python library that provides specialized container datatypes.
These can help you write cleaner, faster, and more efficient code.

We’ll focus on five key members:

  1. Counter
  2. defaultdict
  3. OrderedDict
  4. deque
  5. namedtuple

1. 🔢 Counter – Counting Made Easy

The Counter class counts how many times each element appears.

✅ Example:

from collections import Counter

fruits = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count = Counter(fruits)

print(count)
Enter fullscreen mode Exit fullscreen mode

🧪 Output:

Counter({'apple': 3, 'banana': 2, 'orange': 1})
Enter fullscreen mode Exit fullscreen mode

You can access individual counts:

print(count['apple'])  # 3
Enter fullscreen mode Exit fullscreen mode

2. 🧰 defaultdict – Avoid Key Errors

A defaultdict lets you set a default type for missing keys — no need to check if the key exists.

✅ Example:

from collections import defaultdict

grades = defaultdict(int)
grades['Alice'] += 1
grades['Bob'] += 5

print(grades)
Enter fullscreen mode Exit fullscreen mode

🧪 Output:

defaultdict(<class 'int'>, {'Alice': 1, 'Bob': 5})
Enter fullscreen mode Exit fullscreen mode

You can also use list, set, or even a custom function as the default.


3. 📜 OrderedDict – Remember Insertion Order (Pre-Python 3.7)

In older versions of Python (before 3.7), normal dict did not preserve insertion order.
OrderedDict ensured that behavior.

✅ Example:

from collections import OrderedDict

od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3

print(od)
Enter fullscreen mode Exit fullscreen mode

🧪 Output:

OrderedDict([('a', 1), ('b', 2), ('c', 3)])
Enter fullscreen mode Exit fullscreen mode

Note: Since Python 3.7+, regular dict also preserves insertion order.


4. 🔄 deque – Fast Appends and Pops from Both Ends

Think of deque (double-ended queue) as a flexible list that is optimized for adding/removing items from both ends.

✅ Example:

from collections import deque

dq = deque([1, 2, 3])
dq.append(4)
dq.appendleft(0)

print(dq)  # deque([0, 1, 2, 3, 4])

dq.pop()       # Removes from right
dq.popleft()   # Removes from left
Enter fullscreen mode Exit fullscreen mode

Perfect for queues, stacks, or sliding windows.


5. 🧱 namedtuple – Tuples with Named Fields

Create lightweight, readable objects without defining a full class.

✅ Example:

from collections import namedtuple

Person = namedtuple('Person', 'name age')
p = Person('Alice', 30)

print(p.name)  # Alice
print(p.age)   # 30
Enter fullscreen mode Exit fullscreen mode

Acts like a tuple but more self-documenting.


🧠 Summary Table

Collection Purpose Like...
Counter Count items in iterable Frequency map
defaultdict Avoid missing key errors Dict with default values
OrderedDict Dict with ordered keys (pre-3.7) Ordered mapping
deque Fast queue/stack List (but faster)
namedtuple Named fields for tuple elements Lightweight class

🔍 Real-World Use Case

Imagine processing log files:

from collections import Counter

with open("access.log") as f:
    ips = [line.split()[0] for line in f]

ip_counts = Counter(ips)
print(ip_counts.most_common(5))  # Top 5 IP addresses
Enter fullscreen mode Exit fullscreen mode

🧪 Practice Task

Try implementing a word counter using Counter:

text = "hello world hello hello code world python code"
# Expected: Counter of each word
Enter fullscreen mode Exit fullscreen mode

Comments 0 total

    Add comment