在Python中,最有效的方法是什么:
my_var = some_var['my_key'] | None
即。如果some_var
包含'my_key'
,则将some_var['my_key']
分配给my_var
,否则使my_var
为None
。
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)
您正在寻找dict
的get()
方法。
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)