Comparing two dictionaries and checking how many (key, value) pairs are equal Comparing two dictionaries and checking how many (key, value) pairs are equal python python

Comparing two dictionaries and checking how many (key, value) pairs are equal


If you want to know how many values match in both the dictionaries, you should have said that :)

Maybe something like this:

shared_items = {k: x[k] for k in x if k in y and x[k] == y[k]}print len(shared_items)


What you want to do is simply x==y

What you do is not a good idea, because the items in a dictionary are not supposed to have any order. You might be comparing [('a',1),('b',1)] with [('b',1), ('a',1)] (same dictionaries, different order).

For example, see this:

>>> 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))]

The difference is only one item, but your algorithm will see that all items are different


def dict_compare(d1, d2):    d1_keys = set(d1.keys())    d2_keys = set(d2.keys())    shared_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 shared_keys if d1[o] != d2[o]}    same = set(o for o in shared_keys if d1[o] == d2[o])    return added, removed, modified, samex = dict(a=1, b=2)y = dict(a=2, b=2)added, removed, modified, same = dict_compare(x, y)