equal
deleted
inserted
replaced
|
1 # dicthelpers.py - helper routines for Python dicts |
|
2 # |
|
3 # Copyright 2013 Facebook |
|
4 # |
|
5 # This software may be used and distributed according to the terms of the |
|
6 # GNU General Public License version 2 or any later version. |
|
7 |
|
8 def _diffjoin(d1, d2, default, compare): |
|
9 res = {} |
|
10 if d1 is d2 and compare: |
|
11 # same dict, so diff is empty |
|
12 return res |
|
13 |
|
14 for k1, v1 in d1.iteritems(): |
|
15 if k1 in d2: |
|
16 v2 = d2[k1] |
|
17 if not compare or v1 != v2: |
|
18 res[k1] = (v1, v2) |
|
19 else: |
|
20 res[k1] = (v1, default) |
|
21 |
|
22 if d1 is d2: |
|
23 return res |
|
24 |
|
25 for k2 in d2: |
|
26 if k2 not in d1: |
|
27 res[k2] = (default, d2[k2]) |
|
28 |
|
29 return res |
|
30 |
|
31 def diff(d1, d2, default=None): |
|
32 return _diffjoin(d1, d2, default, True) |
|
33 |
|
34 def join(d1, d2, default=None): |
|
35 return _diffjoin(d1, d2, default, False) |