Обрабатывать необъявленную клавишу 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. Как я могу справиться с этим?

One Solution collect form web for “Обрабатывать необъявленную клавишу dict в Python”

В вашем конкретном случае вы должны, вероятно, сделать это вместо сравнения с 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 .get для возврата значения (по умолчанию нет), если ключ отсутствует.

 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 dict .

  • Захват всех исключений в Python
  • прохождение javascript
  • Как перекрыть исключение, содержащее информацию об исходном исключении?
  • Как предотвратить попытку поймать каждую возможную строку в python?
  • Пользователь выхода Python на первом StopIteration
  • Глобальная обработка исключений Python
  • Почему я получаю ошибку кодирования ASCII с данными Unicode в Python 2.4, но не в 2,7?
  • Что может заставить WordNetCorpusReader не иметь атрибута LazyCorpusLoader?
  • Python - лучший язык программирования в мире.