Reputation: 67
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
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
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