my_var = some_var['my_key'] | None
如果some_var
包含'my_key'
,则将some_var['my_key']
分配给my_var
,否则使my_var
成为None
。
my_var = some_var['my_key'] | None
如果some_var
包含'my_key'
,则将some_var['my_key']
分配给my_var
,否则使my_var
成为None
。
如果字典中不存在某个键,Python 会抛出一个 KeyError
异常,所以你不能像在 JavaScript 中那样编写代码。但是,如果你像你的例子一样专门操作字典,有一个非常好用的函数 mydict.get('key', default)
,它会尝试从字典中获取键并在键不存在时返回默认值。
如果你只想要默认值为 None
,你不需要显式地传递第二个参数。
根据字典包含的内容和你期望访问未设置键的频率,你可能还想使用 collections
包中的 defaultdict
。这个函数接受一个工厂函数,并在访问未设置键时使用它来返回新值。当你的字典预计仅包含一种类型时,这个函数特别有用。
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
。因此,您可以使用一个lambda表达式:defaultdict(lambda: None)
dict
的 get()
方法。my_var = some_var.get('some_key')
get()
方法用于返回关联于 'some_key'
的值,如果存在该值。如果键不存在,则返回 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
对于一个新的字典:
from collections import defaultdict
# None is the default, but you can change this default value
d = defaultdict(lambda: None)
对于一个已存在的字典:
from collections import defaultdict
# convert a dictionary to a defaultdict
d = defaultdict(lambda: None,d)
some_var
可能未定义吗? - Sven Marnachmy_var = some_var.get('my_key')
- Seraf