deepcompare is a library to deeply compare data structures with each other. It can check if two data
structures contain the same data, or if a data structure is a subset of another data structure. The library
supports Sequence (e.g. list or tuple) and Mapping (e.g. dict) types for the deep comparison.
With a correctly configured pipenv toolchain:
pipenv install python-deepcompareYou may also use classic pip to install the package:
pip install python-deepcompare- As a default, the comparison treats all
Sequenceand allMappingtypes the same (e.g.(1, 2, 3)is equal to[1, 2, 3]). To enable strict type checks, use thestrictkeyword argument. - The
partial_comparemethod checks if the data structure given as the second parameter is a subset of the data structure given as the first parameter.- For
Mappingtypes this means, that all keys of the second data structure are also keys on the first data structure, and the values of the keys are also equal (e.g.{'a': 1, 'b': 2}is a subset of{'a': 1, 'b': 2, 'c': 3}, but{'a': 1, 'b': 2, 'd': 4}is not). - For
Sequencetypes this means, that all values of the second data structure are also values of the first data structure, and the values are in the same order (e.g.[1, 3, 5]is a subset of[1, 2, 3, 4, 5], but[1, 5, 3]is not).
- For
import deepcompare
# test if two data structures are equal, but the types to not need to match exactly
deepcompare.compare(
{'key1': (1, 2, 3), 'key2': {'key3': [4, 5, 6]}},
{'key1': [1, 2, 3], 'key2': {'key3': (4, 5, 6)}},
) # returns: True
# test if two data structures are equal, and make sure the types match exactly
deepcompare.compare(
{'key1': (1, 2, 3), 'key2': {'key3': [4, 5, 6]}},
{'key1': [1, 2, 3], 'key2': {'key3': (4, 5, 6)}},
strict=True,
) # returns: False
# test if the second data structure is contained within the first, but
# the types to not need to match exactly
deepcompare.partial_compare(
{'key1': (1, 2, 3), 'key2': {'key3': [4, 5, 6]}, 'key4': True},
{'key1': [1, 2], 'key2': {'key3': (4, 6)}},
) # returns: True
# test if the second data structure is contained within the first, and
# make sure the types match exactly
deepcompare.partial_compare(
{'key1': (1, 2, 3), 'key2': {'key3': [4, 5, 6]}, 'key4': True},
{'key1': [1, 2], 'key2': {'key3': (4, 6)}},
strict=True,
) # returns: False- Andreas Stocker [email protected], Lead Developer