PYTHON
Group Data Efficiently with Python defaultdict
Discover how to use Python's collections.defaultdict to effortlessly group items by a common key, simplifying data aggregation and avoiding KeyError exceptions.
from collections import defaultdict
def group_users_by_role(user_data):
"""
Groups users by their role using defaultdict.
"""
users_by_role = defaultdict(list)
for user in user_data:
users_by_role[user['role']].append(user['name'])
return dict(users_by_role) # Convert back to a regular dict for final output if needed
def group_products_by_category(product_list):
"""
Groups products by their category, counting items using defaultdict.
"""
products_count_by_category = defaultdict(int)
for product in product_list:
products_count_by_category[product['category']] += 1
return dict(products_count_by_category)
# Example usage for a web application scenario
users = [
{'name': 'Alice', 'role': 'admin'},
{'name': 'Bob', 'role': 'editor'},
{'name': 'Charlie', 'role': 'admin'},
{'name': 'David', 'role': 'viewer'}
]
grouped_users = group_users_by_role(users)
print("Users by role:", grouped_users)
products = [
{'id': 1, 'name': 'Laptop', 'category': 'Electronics'},
{'id': 2, 'name': 'Mouse', 'category': 'Electronics'},
{'id': 3, 'name': 'Book A', 'category': 'Books'},
{'id': 4, 'name': 'Shirt', 'category': 'Apparel'},
{'id': 5, 'name': 'Book B', 'category': 'Books'},
]
grouped_products_count = group_products_by_category(products)
print("Product count by category:", grouped_products_count)
How it works: `collections.defaultdict` simplifies dictionary operations by providing a default value for a new key when accessed. This is extremely useful for grouping items or accumulating data without needing to explicitly check if a key exists before appending or incrementing, making the code cleaner and less error-prone in web development contexts.