关于Python的:访问dict键,如果不存在则返回None

Access dict key and return None if doesn't exist

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

1
my_var = some_var['my_key'] | None

也就是说,如果some_var包含'my_key'则将some_var['my_key']分配给my_var,否则使my_var成为None


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

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

根据您的dict包含的内容以及您希望多久访问一次未设置的密钥,您还可能对使用来自collections包的defaultdict感兴趣。这需要一个工厂,并使用它从__missing__magic方法返回新的值,每当您访问一个没有明确设置的键时。如果您的dict只包含一种类型,那么它特别有用。

1
2
3
4
5
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()方法。

1
my_var = some_var.get('some_key')

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


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

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

会打印。

1
Undefined key

这不仅有助于调试,而且在解析JSON时(至少在我的经验中),您应该尽可能多地使用get()而不是[]


假设some_var是一本字典,您需要dict.get()

1
my_var = some_var.get('my_key')

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

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

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

my_var=一些_var或无

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

1
my_var = some_var.get('my_key', None)


1
2
3
4
try:
    my_var = some_var
except:
    my_var = None

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