访问dict键,如果不存在则返回None

9-b*_*its 42 python dictionary

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

my_var = some_var['my_key'] | None
Run Code Online (Sandbox Code Playgroud)

即.分配some_var['my_key']my_var如果some_var包含'my_key',否则做my_varNone.

End*_*age 48

KeyError如果字典中不存在密钥,Python将抛出一个,因此您无法以与JavaScript完全相同的方式编写代码.但是,如果您在示例中专门使用dicts,则有一个非常好的函数mydict.get('key', default),它尝试从字典中获取密钥,并在密钥不存在时返回默认值.

如果你只想默认为None你不需要显式传递第二个参数.

根据你的字典包含,以及如何往往你希望访问未设置的按键,你也可能有兴趣在使用defaultdictcollections包.这需要一个工厂,并且__missing__只要您访问未明确设置的密钥,就会使用它从magic方法返回新值.如果你的dict只包含一种类型,那么它特别有用.

from collections import defaultdict

foo = defaultdict(list)
bar = foo["unset"]
# bar is now a new empty list
Run Code Online (Sandbox Code Playgroud)

注意文档(对于2.7.13)声称如果你没有传递一个参数,defaultdict它将返回未None设置的键.当我尝试它时(在2.7.10上,它就是我碰巧安装的那个),这不起作用,我收到了KeyError.因人而异.或者,您可以使用lambda:defaultdict(lambda: None)

  • **KeyError**是访问字典中不存在的键时引发的错误. (2认同)

Dav*_*nan 32

你正在寻找的get()方法dict.

my_var = some_var.get('some_key')
Run Code Online (Sandbox Code Playgroud)

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


woc*_*esa 12

.get()方法的好处是你可以实际定义一个值,以便在密钥不存在时返回.

my_dict = { 1: 'one', 2: 'two' }
print my_dict.get(3, 'Undefined key')
Run Code Online (Sandbox Code Playgroud)

会打印.

Undefined key
Run Code Online (Sandbox Code Playgroud)

这不仅是为了调试的目的非常有帮助,同时也解析JSON时(以我的经验,至少),你应该更喜欢使用get()[]尽可能多的.


Sve*_*ach 10

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

my_var = some_var.get('my_key')
Run Code Online (Sandbox Code Playgroud)

此结果默认为Noneif my_key,但您可以提供不同的默认值:

my_var = some_var.get('my_key', default)
Run Code Online (Sandbox Code Playgroud)


小智 5

在 python 中"|"被转换为"or",所以:

my_var = some_var or None
Run Code Online (Sandbox Code Playgroud)

编辑:

您已经编辑了您的初始帖子。做你想做的正确方法是:

my_var = some_var.get('my_key', None)
Run Code Online (Sandbox Code Playgroud)