PYTHON
Flexible Dictionary Merging in Python
Learn various methods for merging dictionaries in Python, including the new | operator (Python 3.9+) and ** operator, crucial for combining configurations or request data in web apps.
# Base configuration settings
default_config = {
"host": "localhost",
"port": 8000,
"debug": False,
"database": {
"type": "sqlite",
"name": "app.db"
}
}
# User-provided or environment-specific configuration overrides
user_config = {
"port": 8080,
"debug": True,
"api_key": "xyz123",
"database": {
"type": "postgresql",
"host": "db.example.com"
}
}
# Method 1: Using the | operator (Python 3.9+)
# Overrides existing keys from left with right.
merged_config_1 = default_config | user_config
print("Merged Config (Python 3.9+ | operator):")
print(merged_config_1)
# Method 2: Using the ** operator (dictionary unpacking)
# Creates a new dictionary. Keys in later dictionaries override earlier ones.
merged_config_2 = {**default_config, **user_config}
print("
Merged Config (** operator):")
print(merged_config_2)
# Method 3: Using .update() method (modifies dictionary in-place)
# Be careful as it modifies the first dictionary.
merged_config_3 = default_config.copy() # Use .copy() to avoid modifying original
merged_config_3.update(user_config)
print("
Merged Config (.update() method):")
print(merged_config_3)
# Note: For deep merging (merging nested dictionaries),
# a custom function or a library like `dict-deep` is required.
# The examples above perform shallow merging.
How it works: This snippet explores different ways to merge dictionaries in Python, a fundamental task in web development for combining configurations, request parameters, or default settings with user overrides. It demonstrates the new | operator (Python 3.9+), the dictionary unpacking ** operator, and the update() method. Each method offers a slightly different approach to combining dictionaries, with later keys overriding earlier ones, and understanding them is crucial for flexible data management.