访问字典键,如果不存在,则返回 None(如果不存在)



在Python中,最有效的方法是什么:

my_var = some_var['my_key'] | None

即。如果some_var包含'my_key',则将some_var['my_key']分配给my_var,否则使my_varNone

Python将抛出一个KeyError,如果字典中不存在该键,那么您就无法以与JavaScript完全相同的方式编写代码。然而,如果您像示例中那样专门使用dicts操作,那么有一个非常好的函数mydict.get('key', default),它会尝试从字典中获取密钥,如果密钥不存在,则返回默认值。

如果您只想默认为None,则不需要显式传递第二个参数。

根据dict包含的内容以及访问未设置密钥的频率,您可能也有兴趣使用collections包中的defaultdict。这需要一个工厂,并使用它从__missing__魔术方法返回新的值,每当您访问一个未明确设置的键时。如果dict只包含一种类型,那么它特别有用。

from collections import defaultdict
foo = defaultdict(list)
bar = foo["unset"]
# bar is now a new empty list

注意:文档(对于2.7.13)声称,如果不将参数传递给defaultdict,它将为未设置的键返回None。当我尝试它时(在2.7.10上,它只是我碰巧安装的),它不起作用,我收到了KeyError。YMMV。或者,您可以只使用lambda:defaultdict(lambda: None)

您正在寻找dictget()方法。

my_var = some_var.get('some_key')

如果存在与'some_key'相关联的值,则get()方法将返回该值。如果密钥不存在,则返回None

.get()方法的优点在于,如果键不存在,您实际上可以定义一个要返回的值。

my_dict = { 1: 'one', 2: 'two' }
print my_dict.get(3, 'Undefined key')

将打印。

Undefined key

这不仅对调试非常有用,而且在解析json时(至少根据我的经验)也非常有用,并且您应该尽可能喜欢使用get()而不是[]

假设some_var是一个字典,则需要dict.get():

my_var = some_var.get('my_key')

如果缺少my_key,则此结果默认为None,但您可以提供不同的默认值:

my_var = some_var.get('my_key', default)

在python中,"|"被翻译为"or",因此:

my_var = some_var or None

编辑:

你已经编辑了最初的帖子。做你想做的事情的正确方法是:

my_var = some_var.get('my_key', None)
try:
    my_var = some_var
except:
    my_var = None

但老实说,这可能并没有触及你想要做的事情的核心……我们需要更多的背景来更全面地回答。

对于dict:

from collections import defaultdict
# None is the default, but you can change this default value
d = defaultdict(lambda: None)

对于现有dict:

from collections import defaultdict
# convert a dictionary to a defaultdict
d = defaultdict(lambda: None,d)

最新更新