PYTHON

Group Data by Key Using Python's `collections.defaultdict`

Efficiently group items from a list of dictionaries into a new dictionary where keys are a common attribute and values are lists of grouped items, leveraging `defaultdict`.

from collections import defaultdict

data = [
    {'id': 1, 'category': 'Electronics', 'name': 'Laptop'},
    {'id': 2, 'category': 'Books', 'name': 'Python Handbook'},
    {'id': 3, 'category': 'Electronics', 'name': 'Smartphone'},
    {'id': 4, 'category': 'Books', 'name': 'Algorithms Explained'},
    {'id': 5, 'category': 'Apparel', 'name': 'T-Shirt'}
]

# Using a regular dictionary (requires checking for key existence)
grouped_data_regular = {}
for item in data:
    category = item['category']
    if category not in grouped_data_regular:
        grouped_data_regular[category] = []
    grouped_data_regular[category].append(item)
print(f"Grouped with regular dict: {grouped_data_regular}")

# Using defaultdict (more concise)
grouped_data_defaultdict = defaultdict(list)
for item in data:
    grouped_data_defaultdict[item['category']].append(item)
print(f"Grouped with defaultdict: {dict(grouped_data_defaultdict)}") # Convert to dict for display

# Example of grouping by multiple keys (e.g., category and then by availability)
more_data = [
    {'id': 1, 'category': 'Electronics', 'name': 'Laptop', 'available': True},
    {'id': 2, 'category': 'Books', 'name': 'Python Handbook', 'available': True},
    {'id': 3, 'category': 'Electronics', 'name': 'Smartphone', 'available': False},
    {'id': 4, 'category': 'Books', 'name': 'Algorithms Explained', 'available': True},
]

grouped_by_category_and_availability = defaultdict(lambda: defaultdict(list))
for item in more_data:
    grouped_by_category_and_availability[item['category']][item['available']].append(item)
print(f"Grouped by category and availability: {grouped_by_category_and_availability}")
How it works: `collections.defaultdict` is a powerful subclass of `dict` that simplifies handling missing keys. When you try to access a key that doesn't exist, it automatically creates it using the factory function provided during initialization (e.g., `list` for an empty list). This eliminates the need for explicit `if key not in dict:` checks, making code for grouping or accumulating items much cleaner and more readable. It's ideal for scenarios like organizing database query results or API responses.

Need help integrating this into your project?

Our team of expert developers can help you build your custom application from scratch.

Hire DigitalCodeLabs