2012-06-06 23 views
0

在下面的字典中,我想檢查aa中的值是否與bb中的值匹配,並生成aa的鍵與bb的鍵的映射。我是否需要重新排列字典?我從一個製表符分隔的文件導入數據,所以我沒有附加到字典。請注意,aa比bb大100倍左右(aa爲10萬行),但這種情況很少會在離線情況下運行。如何使用Python中的公鑰將值映射到值

輸入:

aa = {1: 'a', 3: 'c', 2 : 'b', 4 : 'd'} 
bb = {'apple': 'a', 'pear': 'b', 'mango' : 'g'} 

所需的輸出(或任何類似的數據結構):

dd = {1 : 'apple', 2 : 'pear'} 
+0

這是映射具有共同價值的鍵,而不是相反的方式。 – mata

+1

'aa'和'bb'中的值是否可以重複?我不知道數據的語義,但是你可以在'aa'和'bb'中交換鍵值嗎? – Vikas

回答

3
aa = {1:'a', 3:'c', 2:'b', 4:'d'} 
bb = {'apple':'a', 'pear':'b', 'mango': 'g'} 

bb_rev = dict((value, key) 
    for key, value in bb.iteritems()) # bb.items() in python3 
dd = dict((key, bb_rev[value]) 
    for key, value in aa.iteritems() # aa.items() in python3 
    if value in bb_rev) 

print dd 
0

你可以做這樣的事情:

>>> aa = {1: 'a', 3: 'c', 2 : 'b', 4 : 'd'} 
>>> bb = {'apple': 'a', 'pear': 'b', 'mango' : 'g'} 
>>> tmp = {v: k for k, v in bb.iteritems()} 
>>> dd = {k: tmp[v] for k, v in aa.iteritems() if v in tmp} 
>>> dd 
{1: 'apple', 2: 'pear'} 

,但請注意,這只是如果aa字典的每個值都顯示爲bb的值字典一次或根本不。