代码:
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 ”是关键,我的大多数密钥都有一个:
的密钥名称
答案 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
。