set symmetric_difference:
set(dict1.items()) ^ set(dict2.items())
edit. Python 2, timeit.
The fastest . set(dict1.viewitems()).symmetric_difference(dict2.viewitems())
Complete the second, and the most readable will be dict1.viewitems() ^ dict2.viewitems()
Worse is my answer : set(dict1.items()) ^ set(dict2.items())
>>> from timeit import timeit
>>> setup = ('dict1 = {str(i): i for i in range(1000)}; '
... 'dict2 = {str(i): (i if i % 10 else i - 1) for i in range(1000)}')
This gives us two dictionaries with elements 1000and 10%different ones, i.e. 200symmetric difference:
>>> exec(setup)
>>> len(dict1.viewitems() ^ dict2.viewitems())
200
We are going to check every case 30,000 times:
>>> def check(expression):
... return timeit(expression, setup, number=30000)
Timings best worst:
>>> check('set(dict1.viewitems()).symmetric_difference(dict2.viewitems())')
8.233164442241105
>>> check('dict1.viewitems() ^ dict2.viewitems()')
8.242523450809585
>>> check('set(dict1.viewitems()).symmetric_difference(dict2.items())')
8.651751725357371
>>> check('set(dict1.items()).symmetric_difference(dict2.items())')
8.774394999897368
>>> check('set(dict1.items()) ^ set(dict2.items())')
9.795530728021276
source
share