中都有
代码:
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"是密钥,我的大多数密钥在keyname
:
签名第二个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
的默认值)。