2017-02-17 165 views
1

什麼是簡單地比較最Python的方式:只有兩個字典在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

**你沒有告訴我們你想要的輸出是什麼**我們只比較平等,即你的結果是一個巨大的布爾值(「all equal」)還是布爾值的一個字典?或數字差異的字典?或者是什麼? – 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在編輯之前真正想要做什麼,但這很好! – 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