/DataDiff

DataDiff compares Python data structures, and returns a structurally consistent diffed data structure.

Primary LanguagePythonMIT LicenseMIT

DataDiff

DataDiff compares Python data structures, and returns a structurally consistent diffed data structure.

This is mostly for my own use at the moment, if you have problems or questions let me know. I'll be cleaning things up to make it nicer for other people to use with better documentation when I get time.

Example Data

PY_TEST_1 = {
  'a':10,
  'b':10,
  'd':[1,2,3],
  'e':[1,2,3],
  'f':{'aa':0, 'bb':5, 'cc':10},
  'g':{'aa':0, 'bb':5, 'cc':20, 'dd':99},
  'h':{'aa':0, 'bb':5, 'cc':10, 'f':{'aaa':300, 'bbb':1200}},
  'i':{'aa':0, 'bb':5, 'cc':10, 'f':{'aaa':300, 'bbb':1200, 'ccc':[], 'ddd':{3: 15}}},
}

PY_TEST_2 = {
  'a':12,
  'b':10,
  'c':15,
  'd':[1,2,3],
  'e':[1,2,3, 4, 5],
  'f':{'aa':0, 'bb':5, 'cc':10},
  'g':{'aa':0, 'bb':5, 'cc':10},
  'h':{'aa':0, 'bb':5, 'cc':10, 'f':{'aaa':300, 'bbb':900, 'ccc':{'a':9}}},
}

Example Invocation

  (source_diff, target_diff) = DataDiff(PY_TEST_1, PY_TEST_2, compare_list_as_value=True)

Result

Source Diff:


{'a': 10,
 'e': [1, 2, 3],
 'g': {'cc': 20, 'dd': 99},
 'h': {'f': {'bbb': 1200}},
 'i': {'aa': 0,
       'bb': 5,
       'cc': 10,
       'f': {'aaa': 300, 'bbb': 1200, 'ccc': [], 'ddd': {3: 15}}}}


Target Diff:


{'a': 12,
 'c': 15,
 'e': [1, 2, 3, 4, 5],
 'g': {'cc': 10},
 'h': {'f': {'bbb': 900, 'ccc': {'a': 9}}}}