Python dict让函数做得不对吗?

时间:2016-07-13 21:13:24

标签: python dictionary

我认为仅当.get(key, default=?)不在字典中时,default函数才会查看key部分。

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

因此,从字面上将上述英语陈述翻译成Python,我写道:val = mainDict.get(key, backupDict[key])

这样,如果mainDict没有key,它会在backupDict中查找,如果它不存在则引发异常,因为我我没有使用get进行backupDict查询。

正在发生的事情是,即使在检查mainDict是否有key之前,Python也会提出异常,因为它不在backupDict中。是的,它不存在,因为它存在于mainDict !!

为什么会这样?

2 个答案:

答案 0 :(得分:4)

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

如果您不想评估它,可以使用其他替代配方,例如:

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'])