Skip to content

Instantly share code, notes, and snippets.

@ChunMinChang
Created September 8, 2015 09:16
Show Gist options
  • Save ChunMinChang/937065f2300772d61aa1 to your computer and use it in GitHub Desktop.
Save ChunMinChang/937065f2300772d61aa1 to your computer and use it in GitHub Desktop.
Python: Diff the dictionary
#!/usr/bin/python
class DictDiffer(object):
"""
Calculate the difference between two dictionaries as:
(1) items intersected
(2) items added
(3) items removed
(4) keys same in both but changed values
(5) keys same in both and unchanged values
"""
def __init__(self, baseDic, dic):
self.baseDic, self.dic = baseDic, dic
self.baseDicSet, self.dicSet = set(baseDic.keys()), set(dic.keys())
self.intersection = self.baseDicSet.intersection(self.dicSet)
def intersected(self):
return self.intersection
def added(self):
return self.dicSet - self.intersection
def removed(self):
return self.baseDicSet - self.intersection
def changed(self):
return set(i for i in self.intersection if self.baseDic[i] != self.dic[i])
def unchanged(self):
return set(i for i in self.intersection if self.baseDic[i] == self.dic[i])
dic1 = {'a': 1, 'b': 3, 'c': 0, 'e':5, 'x':99, 'z':8}
dic2 = {'a': 1, 'b': 6, 'd': 0, 'f':7, 'x':99, 'y':45}
d = DictDiffer(dic1, dic2)
print "intersected:", d.intersected() # set(['a', 'b', 'x'])
print "Added:", d.added() # set(['d', 'f', 'y'])
print "removed:", d.removed() # set(['c', 'e', 'z'])
print "changed:", d.changed() # set(['b'])
print "unchanged:", d.unchanged() # set(['a', 'x'])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment