我认为仅当.get(key, default=?)
不在字典中时,default
函数才会查看key
部分。
我想要做的是,查看我的主词典中是否存在密钥,如果不存在,请查看它是否存在于备份词典中,如果它不在主词典或备份中,则引发KeyError。
因此,从字面上将上述英语陈述翻译成Python,我写道:val = mainDict.get(key, backupDict[key])
这样,如果mainDict
没有key
,它会在backupDict
中查找,如果它不存在则引发异常,因为我我没有使用get
进行backupDict
查询。
正在发生的事情是,即使在检查mainDict
是否有key
之前,Python也会提出异常,因为它不在backupDict
中。是的,它不存在,因为它存在于mainDict
!!
为什么会这样?
答案 0 :(得分:4)
在调用之前评估函数调用的参数。当您使用backupDict[key]
作为参数时,必须对其进行评估,以便将结果传递给get
。 default
参数始终评估;它并不总是返回。
如果您不想评估它,可以使用其他替代配方,例如:
mainDict[key] if key in mainDict else backupDict[key]
这只会评估一个或另一个。
答案 1 :(得分:2)
是的,如果密钥不在字典中,dict.get函数将返回php bin/symfony_requirements
。但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'])