- 
          
 - 
                Notifications
    
You must be signed in to change notification settings  - Fork 254
 
Description
Hi there, deepdiff is an excellent tool for diffing and patching objects. The current method for updating one dictionary with the contents of another using DeepDiff and DeepDelta is powerful but can be verbose for the common task of simply merging two dictionaries.
Current Workflow
To make one dictionary become another (a "patch" operation), the current workflow involves several steps:
from deepdiff import DeepDiff, DeepDelta
# Base dictionary
dict1 = {'a': 1, 'nested': {'x': 10}}
# A second dictionary with changes and new keys
dict2 = {'b': 2, 'nested': {'y': 20}}
# The current multi-step process to "patch" dict1 to become dict2
diff = DeepDiff(dict1, dict2)
delta = DeepDelta(diff)
patched_dict = dict1 + delta
# The result is equal to dict2
# patched_dict == {'b': 2, 'nested': {'y': 20}}Proposed Enhancement
While the patching workflow is great, a very common use case is a true "combination" merge, where keys from both dictionaries are combined recursively. It would be a great enhancement to offer a simple, one-step utility function for this purpose.
Here is an example of how the proposed DeepMerge function could work:
# Proposed simpler workflow for a true merge
# from deepdiff.util import deep_merge # Proposed location
dict1 = {'a': 1, 'nested': {'x': 10}}
dict2 = {'b': 2, 'nested': {'y': 20}}
# The function would combine keys from both dictionaries
merged_dict = DeepMerge(dict1, dict2)
# Expected result of a combination merge:
# {'a': 1, 'b': 2, 'nested': {'x': 10, 'y': 20}}Adding this function would make deepdiff an even more complete toolkit for dictionary manipulation...
And I'm also aware that there is another deepmerge library that has that functionality and can also see a point in keeping it separate. But I imagine all the building blocks are there and its more of a convenience function?
Thanks for considering!