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))
(add, , [(c, foobar)])
(remove, , [(d, barfoo)])