2015-06-26 139 views
-6

如何比较两个不同的字典使用字典理解,以类似的方式列表理解。例如,给定:字典理解比较两个字典

dict1 = {'a': 1, 'b': 2, 'c': 3} 
dict2 = {'a': 3, 'b': 10, 'c': 4} 

#create another dict which contains key-(value1 x value2) 
dict3 = {'a': 3, 'b': 20, 'c': 12} 
+5

...通过写字典理解? – jonrsharpe

回答

0

创建密钥的交点,然后在两个字典访问值:

{k: dict1[k] * dict2[k] for k in dict1.viewkeys() & dict2} 

这使用dictionary views作为集(和&创建一个集交点)。

在Python 3你通过默认方式dicitonary观点:通过使用关键交集

{k: dict1[k] * dict2[k] for k in dict1.keys() & dict2} 

,可以确保你只能得到同时出现在字典中的键。

1
>>> dict1 = {'a': 1, 'b': 2, 'c': 3} 
>>> dict2 = {'a': 3, 'b': 10, 'c': 4} 
>>> { k: v * dict2[k] for k, v in dict1.items() if k in dict2 } 
{'a': 3, 'b': 20, 'c': 12} 

这包括检查,只有那些项目将被multiplicated其中在两个字典存在密钥。或者,您可以换用dict1dict2来达到同样的效果。

1

假设所有键都共享:

>>> dict1 = {'a': 1, 'b': 2, 'c': 3} 
>>> dict2 = {'a': 3, 'b': 10, 'c': 4} 
>>> {k: dict1[k] * dict2[k] for k in dict1} 
{'a': 3, 'c': 12, 'b': 20} 

如果密钥不被共享:

>>> dict1 = {'a': 1, 'b': 2, 'c': 3} 
>>> dict2 = {'a': 3, 'b': 10, 'd': 4} # no 'c' key 
>>> {k: dict1[k] * dict2[k] for k in dict1 if k in dict2} 
{'a': 3, 'b': 20}