2016-07-13 23 views
2

我认为只有在key不在字典中时,.get(key, default=?)函数才会查看default部分。Python字典获取函数没有做正确的事情?

我想要做的是查看我的主字典中是否存在密钥,如果不存在,请查看它是否存在于备份字典中,并在KeyError不在主要或备份中时引发。

所以,从字面上翻译上面的英文语句Python中,我写道:val = mainDict.get(key, backupDict[key])

这样,如果mainDict没有key,它会去查backupDict,提高异常,如果它不存在或者,因为我没有使用get来查找backupDict

发生了什么事情,即使在检查mainDict是否有key或没有,Python正在提出异常,它不在backupDict。是的,它不在那里,因为它在mainDict

这是怎么发生的?

+1

'GET'只是 “看” 了'default'如果'key'没有找到,但是默认值是否被'get'看着。 – user2357112

回答

4

在调用之前评估函数调用的参数。当您使用backupDict[key]作为参数时,必须对其进行评估,以便将结果传递给getdefault参数总是评估;它并不总是返回

如果你不想评价它,你可以使用一些替代的表述,如:

mainDict[key] if key in mainDict else backupDict[key] 

这只会评估一个或另一个。

+0

很高兴知道。我认为'默认'是在需要时进行评估。谢谢! – shikhanshu

2

是的,dict.get函数返回default如果密钥不在字典中。但default被评估。

您可以使用这样的中级字典。

main = dict(a=5, c=3) 
backup = dict(a=6, b=9, c=4) 

intermediate = dict(backup, **main) 
print(intermediate['a']) 
print(intermediate['b']) 

你得到:

5 # from the ``main``dict, 
9 # from the ``backup dict``. 

而且具有:

print(intermediate['d']) 

你得到一个异常:

Traceback (most recent call last): 
    File "python", line 9, in <module> 
KeyError: 'd'