# Method 1: Using the ** operator (Python 3.5+) dict1 = {'a': 1, 'b': 2} dict2 = {'c': 3, 'd': 4} merged_dict_1 = {**dict1, **dict2} print(f"Merged using **: {merged_dict_1}") # Expected: {'a': 1, 'b': 2, 'c': 3, 'd': 4} # Handling overlapping keys - later dictionary wins dict3 = {'a': 5, 'e': 6} merged_dict_2 = {**dict1, **dict2, **dict3} print(f"Merged with overlap using **: {merged_dict_2}") # Expected: {'a': 5, 'b': 2, 'c': 3, 'd': 4, 'e': 6} # Method 2: Using the | operator (Python 3.9+) dict4 = {'x': 10, 'y': 20} dict5 = {'z': 30, 'x': 40} # Overlapping key 'x' merged_dict_3 = dict4 | dict5 print(f"Merged using | (Python 3.9+): {merged_dict_3}") # Expected: {'x': 40, 'y': 20, 'z': 30} (dict5's 'x' wins) # In-place merge/update using |= (Python 3.9+) dict_to_update = {'color': 'red', 'size': 'medium'} updates = {'size': 'large', 'price': 100} dict_to_update |= updates print(f"In-place update using |=: {dict_to_update}") # Expected: {'color': 'red', 'size': 'large', 'price': 100} # Method 3 (older, less concise): Using .update() dict_old_method = {'key1': 'val1'} dict_old_method.update({'key2': 'val2', 'key1': 'new_val1'}) print(f"Merged using .update(): {dict_old_method}") # Expected: {'key1': 'new_val1', 'key2': 'val2'}