Jack Liaiea
Jack Liaiea

Reputation: 67

Only compare values of matching keys in two dictionaries in python

What is the most pythonic way of simply comparing:

dict1 = {'Class1': 10, 'Class2': 18, 'Class3': 5}
dict2 = {'Class1': 10, 'Class2': 18, 'Class4': 11}

for key in dict1:
    for key2 in dict2:
        if key == key2:
            self.assertEqual(dict1[key], dict2[key2])

I feel like my solution of doing a nested for loop to compare all of dict2 keys to each key in dict1 is inefficient. The goal is to only compare the value for the keys that both dict1 and dict2 have.

Upvotes: 1

Views: 1054

Answers (2)

MSeifert
MSeifert

Reputation: 152607

Building on @Mitch's answer you can compare them inside all:

dict1 = {'Class1': 10, 'Class2': 18, 'Class3': 5}
dict2 = {'Class1': 10, 'Class2': 18, 'Class4': 11}
all(dict1[k] == dict2[k] for k in dict1.keys() & dict2.keys())

or in your case:

self.assertTrue(all(dict1[k] == dict2[k] for k in dict1.keys() & dict2.keys()))

Upvotes: 2

miradulo
miradulo

Reputation: 29690

You can get the key intersection on which to iterate and compare with

dict1.keys() & dict2.keys()

For instance,

>>> {k: (dict1[k], dict2[k]) for k in dict1.keys() & dict2.keys()}
{'Class1': (10, 10), 'Class2': (18, 18)}

# or 

>>> for k in dict1.keys() & dict2.keys():
        print(dict1[k], dict2[k])

18 18
10 10

Upvotes: 3

Related Questions