2017-02-17 1 views
1

Самого вещий способ простого сравнения:сравнить только значения соответствующих ключей в двух словарях в Python

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]) 

Я чувствую, что мое решение делать вложенный цикл для сравнения всех ключей dict2 каждого ключ в dict1 неэффективен. Цель состоит в том, чтобы сравнить только значение для ключей, которые имеют как dict1, так и dict2.

+0

** Вы не говорите нам, какой результат вы хотите. ** Мы сравниваем только для равенства, т. Е. Ваш результат - один гигантский логический («все равный») или dict логических? или диктом числовых различий? или что? – smci

+0

Каково ваше решение? который, по вашему мнению, неэффективен. – dnit13

+0

К сожалению, я добавил пример для большей ясности –

ответ

2

Опираясь на @ ответ Митча вы можете сравнить их в 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()) 

или в вашем случае:

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

Да, я не был уверен, что OP действительно хотел _do_ перед редактированием, но это хорошо! – miradulo

3

Вы можете получить ключ перекрестку, на котором будет перебирать и сравнивать с

dict1.keys() & dict2.keys() 

Например,

>>> {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 
Смежные вопросы