2013-02-27 113 views
1

產生另一種解釋,我有兩個字典,如:比較多本字典和使用python

dict1 = {'Ron': ['Ronaldo', 'Ronald', 'Ron', 'Ronny'], 
     'John': ['Johnny', 'john', 'johnny Bravo'], 
     'Hard': ['Hardy', 'Hardy Boys', 'Hardness']} 

dict2 = {'Ronald': ['America', 'New York'], 
     'Johnny': ['Canada', 'Ottawa']} 

我想比較兩個字典並提取「關鍵」的dict1 dict2當且僅當'關鍵' 的dict2值匹配dict1!像:

resultant_dict = {'Ron' : ['America', 'New York'], 
        'John' : ['Canada', 'Ottawa']} 

我已經嘗試嵌套的循環,並能獲得所需的字典,但可以請人幫我在Python的發電機這樣做!謝謝
注意:DICT2的KEY只能是DICT1的價值中的一個!

+0

請說明您的嘗試嗎? – 2013-02-27 10:10:51

+1

此外,這個問題還沒有很好的定義 - 「dict2」中的一個關鍵字只能是「dict1」的一個值嗎?如果不是,那麼在這種情況下會發生什麼? – 2013-02-27 10:11:41

回答

4

首先,扭轉dict1詞典:

rev = {v:k for k,vs in dict1.iteritems() for v in vs} 

rev現在是:

{'Hardness': 'Hard', 
'Hardy': 'Hard', 
'Hardy Boys': 'Hard', 
'Johnny': 'John', 
'Ron': 'Ron', 
'Ronald': 'Ron', 
'Ronaldo': 'Ron', 
'Ronny': 'Ron', 
'john': 'John', 
'johnny Bravo': 'John'} 

然後,使用此字典從dict2地圖鍵:

resultant_dict = {rev[k]:v for k,v in dict2.iteritems()} 

返回

{'John': ['Canada', 'Ottawa'], 'Ron': ['America', 'New York']}