##// END OF EJS Templates
dicthelpers.diff: compare against default for missing values...
Siddharth Agarwal -
r18894:ed46c2b9 default
parent child Browse files
Show More
@@ -11,23 +11,23 b' def diff(d1, d2, default=None):'
11 11 This includes keys that are present in one dict but not the other, and
12 12 keys whose values are different. The return value is a dict with values
13 13 being pairs of values from d1 and d2 respectively, and missing values
14 represented as default.'''
14 treated as default, so if a value is missing from one dict and the same as
15 default in the other, it will not be returned.'''
15 16 res = {}
16 17 if d1 is d2:
17 18 # same dict, so diff is empty
18 19 return res
19 20
20 21 for k1, v1 in d1.iteritems():
21 if k1 in d2:
22 v2 = d2[k1]
23 if v1 != v2:
24 res[k1] = (v1, v2)
25 else:
26 res[k1] = (v1, default)
22 v2 = d2.get(k1, default)
23 if v1 != v2:
24 res[k1] = (v1, v2)
27 25
28 26 for k2 in d2:
29 27 if k2 not in d1:
30 res[k2] = (default, d2[k2])
28 v2 = d2[k2]
29 if v2 != default:
30 res[k2] = (default, v2)
31 31
32 32 return res
33 33
@@ -49,5 +49,11 b' class testdicthelpers(unittest.TestCase)'
49 49 'c': ('baz', 456),
50 50 'd': (456, 'quux')})
51 51
52 # check that we compare against default
53 self.assertEqual(diff(d1, d2, 'baz'), {'a': ('foo', 'foo2'),
54 'd': ('baz', 'quux')})
55 self.assertEqual(diff(d1, d2, 'quux'), {'a': ('foo', 'foo2'),
56 'c': ('baz', 'quux')})
57
52 58 if __name__ == '__main__':
53 59 silenttestrunner.main(__name__)
General Comments 0
You need to be logged in to leave comments. Login now