获取Keyerror同时通过另一个字典中的值获取一个字典的值

时间:2015-12-05 12:49:14

标签: python dictionary

代码:

dict1 ={"a:b":"w","cd":"x","ef":"y","gh":"z"}
dict2 ={"a:b":"l","cd":"m","ef":"n","gh":"o"}

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

预期产出:

dict3 = {"l":"w","m":"x","n":"y","o":"z"}
print dict3

我得到的是什么:

Traceback (most recent call last):
File "all.py", line 45, in <module>
dict3 = {v:dict1[k] for k,v in dict2.iteritems()}  
File "all.py", line 45, in <dictcomp>
dict3 = {v:dict1[k] for k,v in dict2.iteritems()}  
KeyError: 'a:b'

我希望 dict3 {k(value of dict2):v(values of dict1)} //检查我上面写的预期输出以便更好地理解。我该如何解决这个问题?

注意:“ a:b ”是关键,我的大多数密钥都有一个:的密钥名称

1 个答案:

答案 0 :(得分:1)

你很可能在第二个dict中没有完全相同的键,尽管键的总数可能不同。此外,原始代码适用于给定的样本数据。

目前,您可以使用.get来取消错误,而不是直接访问密钥:

dict1 ={"a:b":"w","cd":"x","ef":"y","gh":"z"}
dict2 ={"a:b":"l","cd":"m","ef":"n","gh":"o"}

dict3 = {v:dict1.get(k) for k,v in dict2.iteritems()}

如果您打印dict3,您应该找到一些分配了值None的密钥(None是未找到密钥时的默认值.get