月关宝盒
你想做的只是简单 x==y你做的不是一个好主意,因为字典中的项目不应该有任何顺序。您可能正在[('a',1),('b',1)]与[('b',1), ('a',1)](相同的词典,不同的顺序)进行比较。例如,看到这个:>>> x = dict(a=2, b=2,c=3, d=4)>>> x{'a': 2, 'c': 3, 'b': 2, 'd': 4}>>> y = dict(b=2,c=3, d=4)>>> y{'c': 3, 'b': 2, 'd': 4}>>> zip(x.iteritems(), y.iteritems())[(('a', 2), ('c', 3)), (('c', 3), ('b', 2)), (('b', 2), ('d', 4))]差异只是一个项目,但您的算法将看到所有项目都不同
弑天下
def dict_compare(d1, d2):
d1_keys = set(d1.keys())
d2_keys = set(d2.keys())
intersect_keys = d1_keys.intersection(d2_keys)
added = d1_keys - d2_keys
removed = d2_keys - d1_keys
modified = {o : (d1[o], d2[o]) for o in intersect_keys if d1[o] != d2[o]}
same = set(o for o in intersect_keys if d1[o] == d2[o])
return added, removed, modified, same
x = dict(a=1, b=2)y = dict(a=2, b=2)added, removed, modified, same = dict_compare(x, y)