Spy*_*ros 433 python dictionary key nonetype
如果它的键存在,我需要一种获取字典值的方法,或者None如果不存在则需要返回.
但是,KeyError如果搜索不存在的密钥,Python会引发异常.我知道我可以检查密钥,但我正在寻找更明确的东西.None如果密钥不存在,有没有办法返回?
Tim*_*ker 723
您可以使用 dict.get()
value = d.get(key)
Run Code Online (Sandbox Code Playgroud)
None如果,将返回key is not in d.您还可以提供将返回的其他默认值,而不是None:
value = d.get(key, "empty")
Run Code Online (Sandbox Code Playgroud)
Joh*_*ooy 62
不要再想了.它内置于语言中.
>>> help(dict)
Help on class dict in module builtins:
class dict(object)
| dict() -> new empty dictionary
| dict(mapping) -> new dictionary initialized from a mapping object's
| (key, value) pairs
...
|
| get(...)
| D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.
|
...
dus*_*der 19
您应该使用该类中的get()方法dict
d = {}
r = d.get( 'missing_key', None )
Run Code Online (Sandbox Code Playgroud)
这将导致r == None.如果在字典中找不到键,则get函数返回第二个参数.
Bjö*_*lex 17
如果您想要更透明的解决方案,可以继承子类dict以获得此行为:
class NoneDict(dict):
def __getitem__(self, key):
return dict.get(self, key)
>>> foo = NoneDict([(1,"asdf"), (2,"qwerty")])
>>> foo[1]
'asdf'
>>> foo[2]
'qwerty'
>>> foo[3] is None
True
Run Code Online (Sandbox Code Playgroud)
job*_*job 11
我通常在这种情况下使用defaultdict.您提供了一个不带参数的工厂方法,并在看到新键时创建一个值.当你想在新键上返回类似空列表的内容时,它会更有用(参见示例).
from collections import defaultdict
d = defaultdict(lambda: None)
print d['new_key'] # prints 'None'
Run Code Online (Sandbox Code Playgroud)
您可以使用dict对象的get()方法,正如其他人已经建议的那样.或者,根据您正在做的事情,您可以使用这样的try/except套件:
try:
<to do something with d[key]>
except KeyError:
<deal with it not being there>
Run Code Online (Sandbox Code Playgroud)
这被认为是处理案件的非常"Pythonic"方法.
正如上面其他人所说,您可以使用 get()。
但是要检查密钥,您还可以执行以下操作:
d = {}
if 'keyname' in d:
# d['keyname'] exists
pass
else:
# d['keyname'] does not exist
pass
Run Code Online (Sandbox Code Playgroud)
一种解决方案是:
item['key'] if 'key' in item else None
Run Code Online (Sandbox Code Playgroud)
在尝试将字典值添加到新列表并想要提供默认值时,这很有用:
例如。
row = [item['key'] if 'key' in item else 'default_value']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
300323 次 |
| 最近记录: |