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。
- "如果它存在"是什么意思?在某些情况下,名称some_var是否未定义?
- 我只是编辑了它——为了澄清——我试图从本质上检查字典中是否存在一个键。
- 我打赌这已经被问到了…
- 我的回答是关于dict.get()非常有用的第二个论点,似乎没有人提到…
- my_var = some_var.get('my_key')
如果字典中没有密钥,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)
- keyError是在访问字典中不存在的键时引发的。
您正在寻找dict的get()方法。
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') |
会打印。
这不仅有助于调试,而且在解析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) |
- "无"是无用的,默认为"无"-->docs.python.org/library/stdtypes.html typesmapping
- 这只是一个例子来说明dict.get的用法。
1 2 3 4
| try:
my_var = some_var
except:
my_var = None |
但老实说,这可能没有触及到你想做的事情的核心…我们需要更多的上下文来更全面地回答。
- 我刚刚添加了一个说明-一些变量实际上是一个字典,我想确保密钥存在于其中,否则就不使用任何变量。