Мне нужен способ получить значение словаря, если его ключ существует, или просто вернуть None
, если его нет.
Тем не менее, Python вызывает KeyError
исключение, если вы ищете ключ, который не существует. Я знаю, что могу проверить ключ, но я ищу что-то более явное. Есть ли способ просто вернуть, None
если ключ не существует?
python
dictionary
key
nonetype
Спирос
источник
источник
.get(key)
вместо[key]
Ответы:
Ты можешь использовать
dict.get()
который вернется,
None
еслиkey is not in d
. Вы также можете указать другое значение по умолчанию, которое будет возвращено вместоNone
:источник
None
если ключ явно указанNone
в dict. Если это не то, что вы хотите, вы можете использовать что-то вродеd.get(key) or "empty"
.[]
,""
,False
,0.0
или на самом делеNone
), то ваше решение будет всегда возвращаться0
. Если вы ожидаетеNone
s в качестве значений, вам придется выполнитьif key in d:
проверку явно."empty"
возвращается, если неверныйkey
ключd
. Это не имеет ничего общего со значением, наkey
которое отображается.Не удивляйся больше. Это встроено в язык.
источник
использование
dict.get
Возвращает значение для ключа, если ключ находится в словаре, иначе по умолчанию. Если default не задано, по умолчанию используется None, поэтому этот метод никогда не вызывает KeyError.
источник
Вы должны использовать
get()
метод изdict
классаЭто приведет
r == None
. Если ключ не найден в словаре, функция get возвращает второй аргумент.источник
None
явно. Это по умолчанию.Если вы хотите более прозрачное решение, вы можете создать подкласс
dict
для такого поведения:источник
defaultdict
том, что он будет расти каждый раз, когда запрашивается элемент, которого еще нет. Это не всегда желательно.foo['bar']['test']['sss']
возвращатьсяNone
вместо исключения, после одной глубины он начинает даватьTypeError
вместоKeyError
NoneDicts
. Это поможет в случае, еслиKeyError
это произойдет в самом внутреннем объекте. В противном случае проблема в том, что когда вы возвращаетеNone
объект, вы больше не можете подписаться на него. Одним из уродливых хаков было бы возвращение другого объекта, который вроде бы тестируетNone
. Остерегайтесь, однако, что это может привести к ужасным ошибкам.return dict.get(self, key)
на этоreturn super().get(key)
? Тогда, если я решу использовать OrderedDict вместо dict, например, мне не придется беспокоиться об изменении нескольких строк кода.Я обычно использую defaultdict для подобных ситуаций. Вы предоставляете фабричный метод, который не принимает аргументов и создает значение, когда он видит новый ключ. Это более полезно, когда вы хотите вернуть что-то вроде пустого списка новых ключей ( см. Примеры ).
источник
defaultdict
том, что он будет расти каждый раз, когда запрашивается несуществующий элемент.Вы можете использовать метод
dict
объектаget()
, как уже предлагали другие. В качестве альтернативы, в зависимости от того, что именно вы делаете, вы можете использовать такойtry/except
набор:Который считается очень "питонским" подходом к рассмотрению дела.
источник
Однострочное решение будет:
Это полезно при попытке добавить значения словаря в новый список и предоставить значение по умолчанию:
например.
источник
Как уже говорили другие, вы можете использовать get ().
Но чтобы проверить ключ, вы также можете сделать:
источник
get
метода.Я был озадачен тем, что было возможно в python2 против python3. Я отвечу на это, основываясь на том, что я сделал для python3. Моя цель была проста: проверить, дал ли ответ json в формате словаря ошибку или нет. Мой словарь называется «токен», а ключ, который я ищу, - «ошибка». Я ищу ключ "ошибка", и если его там не было, он установил его в значение None, тогда проверка - это значение None, если так, продолжайте с моим кодом. Оператор else будет обрабатываться, если у меня есть ключ «ошибка».
источник
Если вы можете сделать это с помощью встроенной
False
функции hasattr :источник