Возвращает None, если ключ словаря недоступен
Мне нужен способ получить значение словаря, если его ключ существует, или просто вернуть None, если это не так.
однако Python возвращает key_error, если вы ищете ключ, который не существует. Я знаю, что могу проверить ключ, но я ищу что-то более явное. Есть ли способ просто вернуть None, если ключ не существует ?
11 ответов:
можно использовать
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'
Как уже говорили выше, вы можете использовать get().
но чтобы проверить ключ, вы также можете сделать:
d = {} if 'keyname' in d: # d['keyname'] exists pass else: # d['keyname'] does not exist pass
вы могли бы использовать
dictобъекта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']
Если вы можете сделать это с помощью
False, значит, есть и hasattr встроенная функция:e=dict() hasattr(e, 'message'): >>> False
можно переопределить
__missing__(self, key)на подклассы dict и возврата нет.class MyDict(dict): def __missing__(self, key): return None
Comments