# dictionary – How to get the difference between two dictionaries in Python?

## dictionary – How to get the difference between two dictionaries in Python?

I think its better to use the symmetric difference operation of sets to do that Here is the link to the doc.

``````>>> dict1 = {1:donkey, 2:chicken, 3:dog}
>>> dict2 = {1:donkey, 2:chimpansee, 4:chicken}
>>> set1 = set(dict1.items())
>>> set2 = set(dict2.items())
>>> set1 ^ set2
{(2, chimpansee), (4, chicken), (2, chicken), (3, dog)}
``````

It is symmetric because:

``````>>> set2 ^ set1
{(2, chimpansee), (4, chicken), (2, chicken), (3, dog)}
``````

This is not the case when using the difference operator.

``````>>> set1 - set2
{(2, chicken), (3, dog)}
>>> set2 - set1
{(2, chimpansee), (4, chicken)}
``````

However it may not be a good idea to convert the resulting set to a dictionary because you may lose information:

``````>>> dict(set1 ^ set2)
{2: chicken, 3: dog, 4: chicken}
``````

Try the following snippet, using a dictionary comprehension:

``````value = { k : second_dict[k] for k in set(second_dict) - set(first_dict) }
``````

In the above code we find the difference of the keys and then rebuild a `dict` taking the corresponding values.

#### dictionary – How to get the difference between two dictionaries in Python?

Another solution would be `dictdiffer` (https://github.com/inveniosoftware/dictdiffer).

``````import dictdiffer

a_dict = {
a: foo,
b: bar,
d: barfoo
}

b_dict = {
a: foo,
b: BAR,
c: foobar
}

for diff in list(dictdiffer.diff(a_dict, b_dict)):
print diff
``````

A diff is a tuple with the type of change, the changed value, and the path to the entry.

``````(change, b, (bar, BAR))