Обрабатывать необъявленный ключ dict в Python
в моем приложении Ruby у меня есть хэш-таблица:
c = {:sample => 1,:another => 2}
Я могу обращаться со столом так:
[c[:sample].nil? , c[:another].nil? ,c[:not_in_list].nil?]
Я пытаюсь сделать то же самое в Python. Я создал новый словарь:
c = {"sample":1, "another":2}
Я не мог обработать исключение значения nil для:
c["not-in-dictionary"]
Я попытался это:
c[:not_in_dictionery] is not None
и он возвращает исключение вместо False.
как мне справиться с этим?
1 ответов
в вашем конкретном случае вы, вероятно, должны сделать это вместо сравнения с None
:
"not_in_dictionary" in c
если вы буквально использовали этот код, он не будет работать:
c[:not_in_dictionary] is not None
Python не имеет специального :
ключевые слова для ключей словаря; вместо этого используются обычные строки.
обычным поведением в Python является создание исключения, когда вы запрашиваете отсутствующий ключ и позволяете вам обрабатывать исключение.
d = {"a": 2, "c": 3}
try:
print d["b"]
except KeyError:
print "There is no b in our dict!"
если вы хотите получить None
если значение отсутствует, вы можете использовать dict
' s .get
метод для возврата значения (None
по умолчанию), если ключ отсутствует.
print d.get("a") # prints 2
print d.get("b") # prints None
print d.get("b", 0) # prints 0
чтобы просто проверить, имеет ли ключ значение в dict
используйте in
или not in
ключевые слова.
print "a" in d # True
print "b" in d # False
print "c" not in d # False
print "d" not in d # True
Python включает в себя модуль, который позволяет определить словари, которые возвращают значение по умолчанию вместо ошибки при обычном использовании : collections.defaultdict
. Вы можете использовать его следующим образом:
import collections
d = collections.defaultdict(lambda: None)
print "b" in d # False
print d["b"] # None
print d["b"] == None # True
print "b" in d # True
обратите внимание на запутанное поведение с in
. Когда вы впервые просматриваете ключ, он добавляет его, указывая на значение по умолчанию, поэтому теперь он считается in
the dict
.