Ответ 1
Вы можете использовать dict.get()
value = d.get(key)
который вернет None
, если key is not in d
. Вы также можете указать другое значение по умолчанию, которое будет возвращено вместо None
:
value = d.get(key, "empty")
Мне нужен способ получить значение словаря, если его ключ существует, или просто вернуть None
, если его нет.
Тем не менее, Python вызывает исключение KeyError
если вы ищете ключ, который не существует. Я знаю, что могу проверить ключ, но я ищу что-то более явное. Есть ли способ просто вернуть None
если ключ не существует?
Вы можете использовать dict.get()
value = d.get(key)
который вернет None
, если key is not in d
. Вы также можете указать другое значение по умолчанию, которое будет возвращено вместо None
:
value = d.get(key, "empty")
Не удивляйся. Он встроен в язык.
>>> 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. | ...
Используйте dict.get
Вы должны использовать метод get()
из класса dict
d = {}
r = d.get( 'missing_key', None )
Это приведет к r == None
. Если ключ не найден в словаре, функция get возвращает второй аргумент.
Если вы хотите более прозрачное решение, вы можете подклассифицировать 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
Я обычно использую defaultdict для подобных ситуаций. Вы предоставляете фабричный метод, который не принимает аргументов и создает значение, когда он видит новый ключ. Это более полезно, когда вы хотите вернуть что-то вроде пустого списка новых ключей (см. Примеры).
from collections import defaultdict
d = defaultdict(lambda: None)
print d['new_key'] # prints 'None'
Вы можете использовать метод dict
object get()
, как уже указывали другие. В качестве альтернативы, в зависимости от того, что вы делаете, вы можете использовать набор try/except
следующим образом:
try:
<to do something with d[key]>
except KeyError:
<deal with it not being there>
Это считается очень "питоновским" подходом к рассмотрению дела.
Однострочное решение будет:
item['key'] if 'key' in item else None
Это полезно при попытке добавить значения словаря в новый список и предоставить значение по умолчанию:
например.
row = [item['key'] if 'key' in item else 'default_value']
Как уже говорилось выше, вы можете использовать get().
Но для проверки ключа вы также можете:
d = {}
if 'keyname' in d:
# d['keyname'] exists
pass
else:
# d['keyname'] does not exist
pass
Если вы можете сделать это с помощью False
, тогда также есть встроенная функция hasattr:
e=dict()
hasattr(e, 'message'):
>>> False
Вы можете переопределить __missing__(self, key)
подклассификацию dict и __missing__(self, key)
None.
class MyDict(dict):
def __missing__(self, key):
return None