2013-02-27 93 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']}