2015-06-15 49 views
0

我已經閱讀了兩個文件,我使用這兩個文件分別創建了ID及其相應序列的字典作爲鍵和值。我試圖找到兩個字典中存在的鍵/值對,並創建一個僅包含這些匹配字符的新鍵。每個字典都有幾千個鍵/值對。我的代碼如下:在兩個字典中匹配鍵/值對並創建第三個字段

matched = {} 
for i in data1.keys(): 
    for j in data2.keys(): 
     if i in j: 
      matched = {i: data1[i]} 
     else: 
      pass 

當我運行這個片段我得到與單個鍵/值對匹配,但是我有兩個類型的字典之間計數的匹配密鑰(並且因此值)和它們2434.有人知道如何解決這個問題嗎?

+0

感謝所有人的快速回答,我總是厭倦列表推導,因爲他們使代碼看起來有點複雜,但我知道他們通常更快? – Spyros

回答

1

問題是此行

matched = {i: data1[i]} 

它覆蓋字典的前值。它應該是

matched[i] = data1[i] 

或者你可以使用update

matched.update({i: data1[i]}) 
1

這是爲了做這件事,使用字典解析:

data3 = {k: v for k,v in data1.iteritems() if (k,v) in data2.iteritems()} 
1

或者,你可以使用一個事實,即keys字典的方法返回一個類似於對象的對象,所以你可以取兩組關鍵的交集:

>>> d1 = {'foo': 1, 'bar': 2, 'baz': 3} 
>>> d2 = {'foo': 3, 'quux': 42, 'baz': 14} 
>>> {key:d1[key] for key in d1.keys() & d2.keys()} 
{'baz': 3, 'foo': 1} 

如果你正在使用Python 2,用d1.viewkeys()d2.viewkeys()更換d1.keys()d2.keys()

相關問題