【问题标题】:Python dict get function not doing the right thing?Python dict get 函数没有做正确的事情?
【发布时间】:2016-07-13 21:13:24
【问题描述】:

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

我要做的是,看看我的主字典中是否存在一个键,如果不存在,看看它是否存在于备份字典中,如果它既不在主字典中也不在备份字典中,则引发 KeyError。

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

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

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

为什么会这样?

【问题讨论】:

  • get 仅在未找到 key 时“查看”default,但无论 get 是否查看它都会评估默认值。

标签: python dictionary


【解决方案1】:

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

如果你不想评估它,你可以使用一些替代的公式,比如:

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

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

【讨论】:

  • 很高兴知道。我认为在需要时会评估“默认”。谢谢!
【解决方案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'

【讨论】:

    猜你喜欢
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 2021-03-10
    • 1970-01-01
    • 2021-01-26
    相关资源
    最近更新 更多