<p>可以对键使用设置操作:</p>
<pre><code>diff = set(dictb.keys()) - set(dicta.keys())
</code></pre>
<p>这里有一个类来查找所有的可能性:添加了什么,删除了什么,哪些键值对是相同的,哪些键值对是更改的。</p>
<pre><code>class DictDiffer(object):
"""
Calculate the difference between two dictionaries as:
(1) items added
(2) items removed
(3) keys same in both but changed values
(4) keys same in both and unchanged values
"""
def __init__(self, current_dict, past_dict):
self.current_dict, self.past_dict = current_dict, past_dict
self.set_current, self.set_past = set(current_dict.keys()), set(past_dict.keys())
self.intersect = self.set_current.intersection(self.set_past)
def added(self):
return self.set_current - self.intersect
def removed(self):
return self.set_past - self.intersect
def changed(self):
return set(o for o in self.intersect if self.past_dict[o] != self.current_dict[o])
def unchanged(self):
return set(o for o in self.intersect if self.past_dict[o] == self.current_dict[o])
</code></pre>
<p>以下是一些示例输出:</p>
<pre><code>>>> a = {'a': 1, 'b': 1, 'c': 0}
>>> b = {'a': 1, 'b': 2, 'd': 0}
>>> d = DictDiffer(b, a)
>>> print "Added:", d.added()
Added: set(['d'])
>>> print "Removed:", d.removed()
Removed: set(['c'])
>>> print "Changed:", d.changed()
Changed: set(['b'])
>>> print "Unchanged:", d.unchanged()
Unchanged: set(['a'])
</code></pre>
<p>作为github回购协议提供:
<a href="https://github.com/hughdbrown/dictdiffer" rel="noreferrer">https://github.com/hughdbrown/dictdiffer</a></p>