2013-06-19 98 views
2

所以,我有兩個字典:匹配的密鑰,做出新的字典,匹配鍵和兩個相關值

dic1 = {1.0: 9.0, 3.0: 33.0, 5.0: 13.0} 
dic2 = {1.0: 3.4, 3.0: 88.9, 4.0: 73.0, 5.0: 9.0} 

的每個鍵的ID號,在DIC1值是等級和dic2中的值是成本。

我想要的是一種將每個ID號與其成本和評級相關聯的方法,並且在該過程中刪除任何在dic1中沒有匹配的鍵dic2。

dic3 = {1.0: (9.0, 4.2), 3.0: (33.0, 88.9), 5.0: (13.0, 9.0)} 

然後我想能夠創建一個列ID,成本,評級數組。

我還沒有想到一種方法來做到這一點。有什麼建議麼?

謝謝!

+0

有沒有在預期的輸出錯誤,關鍵'1.0'應該是'(價值9.0,3.4)' –

回答

1

試試這個,這將工作在舊版本的Python(比2.7以上):

dic3 = {} 
for k in dic1.viewkeys() & dic2.viewkeys(): 
    dic3[k] = (dic1[k], dic2[k]) 

還是這個,這種方式將在最新版本的Python(> = 2.7,但< 3.0)工作,可使用字典推導:

dic3 = { k : (dic1[k], dic2[k]) for k in dic1.viewkeys() & dic2.viewkeys() } 

在Python 3.0和至多按鍵已經視爲集,得到的最好的解決方案:

dic3 = { k : (dic1[k], dic2[k]) for k in dic1.keys() & dic2.keys() } 

無論如何,竅門,以確定共同的鑰匙,兩個字典是相交的集合,它按預期工作:

dic3 
=> {1.0: (9.0, 3.4), 3.0: (33.0, 88.9), 5.0: (13.0, 9.0)} 
1

使用的字典,理解,dic1.viewkeys() & dic2.viewkeys()從兩個庫返回一組所有常用按鍵:

>>> dic1 = {1.0: 9.0, 3.0: 33.0, 5.0: 13.0} 
>>> dic2 = {1.0: 3.4, 3.0: 88.9, 4.0: 73.0, 5.0: 9.0} 
>>> {k : (dic1[k],dic2[k]) for k in dic1.viewkeys() & dic2.viewkeys()} 
{1.0: (9.0, 3.4), 3.0: (33.0, 88.9), 5.0: (13.0, 9.0)} 

對於py2.6和早期使用dict()

>>> dict((k , (dic1[k],dic2[k])) for k in dic1.viewkeys() & dic2.viewkeys()) 
{1.0: (9.0, 3.4), 3.0: (33.0, 88.9), 5.0: (13.0, 9.0)} 

在py3.x僅使用dict.keys()

>>> {k : (dic1[k],dic2[k]) for k in dic1.keys() & dic2.keys()} 
{1.0: (9.0, 3.4), 3.0: (33.0, 88.9), 5.0: (13.0, 9.0)} 
3
dic3 = {k : (v1, dic2[k]) for k, v1 in dic1.items() if k in dic2} 
+0

是的,這比使用一組更清潔:-) – alexis