在 Python 中,最有效的方法是什么:
my_var = some_var['my_key'] | None
如果 some_var包含 'my_key',则将 some_var['my_key']分配给 my_var,否则将 my_var分配给 None。
some_var
'my_key'
some_var['my_key']
my_var
None
try: my_var = some_var except: my_var = None
但说实话,这可能没有触及到你试图做的事情的核心... ... 我们需要更多的上下文来更全面地回答这个问题。
在 python 中,"|"被翻译成 "or",因此:
"|"
"or"
my_var = some_var or None
编辑:
你已经编辑了你最初的文章,正确的做法是:
my_var = some_var.get('my_key', None)
您正在寻找 dict的 get()方法。
dict
get()
my_var = some_var.get('some_key')
如果存在与 'some_key'关联的值,则 get()方法将返回该值。如果密钥不存在,则返回 None。
'some_key'
假设 some_var是一本字典,那么您需要 dict.get():
dict.get()
my_var = some_var.get('my_key')
如果缺少 my_key,这个结果默认为 None,但是您可以提供一个不同的默认值:
my_key
my_var = some_var.get('my_key', default)
如果字典中没有这个键,Python 会抛出一个 KeyError,因此您不能用与 JavaScript 完全相同的方式编写代码。但是,如果您像在示例中一样使用 dicts 进行操作,那么有一个非常好的函数 mydict.get('key', default),它尝试从 dictionary 中获取键,并在键不存在时返回默认值。
KeyError
mydict.get('key', default)
如果只想默认为 None,则不需要显式传递第二个参数。
根据您的 dict 包含的内容以及预期访问未设置键的频率,您可能还有兴趣使用 collections包中的 defaultdict。这将获取一个工厂,并在访问未显式设置的键时使用它从 __missing__ Magic 方法返回新值。如果您的结果预期只包含一种类型,那么它特别有用。
collections
defaultdict
__missing__
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)
defaultdict(lambda: None)
.get()方法的伟大之处在于,您可以实际定义一个值,以便在键不存在的情况下返回。
.get()
my_dict = { 1: 'one', 2: 'two' } print my_dict.get(3, 'Undefined key')
会打印出来。
Undefined key
这不仅对于调试非常有帮助,而且对于解析 json (至少在我的经验中)也非常有帮助,您应该尽可能多地使用 get()而不是 []。
[]
对于 新的的结论:
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)