检查密钥是否存在并在Python中同时获取值?

Del*_*gan 2 python dictionary python-3.x

有时我们可能需要验证字典中是否存在密钥,并且如果存在相应的值则进行某些操作.

通常,我这样做:

if key in my_dict:
    value = my_dict[key]
    # Do something
Run Code Online (Sandbox Code Playgroud)

这当然是高度可读和快速的,但从逻辑的角度来看,它困扰我,因为相同的动作连续执行两次.这是浪费时间.

当然,对字典中的值的访问是分摊的,并且通常是即时的.但是,如果情况并非如此,我们需要重复多次呢?

我想到的第一个解决方法是使用.get()并检查返回的值是否不是默认值.

value = my_dict.get(key, default=None)
if value is not None:
    # Do Something
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不是很实用,如果密钥存在且它的相应值是精确的,它可能会导致问题None.

另一种方法是使用try/ exceptblock.

try:
    value = my_dict[key]
    # Do something
except KeyError:
    pass
Run Code Online (Sandbox Code Playgroud)

但是,我非常怀疑这是最好的方法.

还有其他解决方案我不知道,还是应该继续使用传统方法?

dla*_*ask 6

如果缺少值的情况非常特殊,那么异常处理是合适的:

try:
    value = my_dict[key]
    # Do something
except KeyError:
    pass
Run Code Online (Sandbox Code Playgroud)

如果要处理丢失和存在的键,则第一个选项很有用.

if key in my_dict:
    value = my_dict[key]
    # Do something
Run Code Online (Sandbox Code Playgroud)

get在这种特定情况下使用不会提供任何优势.相反,您必须找到一个非冲突的值来识别缺失的键条件.