Обычно я использую следующую идиому при работе с словарем Python:
try:
val = dct[key]
except KeyError:
print key, " is not valid"
поскольку для больших словарей утверждение
if key in dct:
# do something
не очень эффективен (поэтому я помню чтение, но я тоже это заметил на практике)
Сегодня я работал с defaultdict, и на мгновение я забыл, что defaultdict никогда не даст вам KeyError, но вместо этого обновит оригинальный словарь.
Как выполнить поиск без обновления defaultdict? Мне действительно нужно напечатать ошибку, чтобы пользователь мог повторно ввести ключ.
Спасибо!
ОБНОВЛЕНИЕ: Несколько плакатов предположили, что мое убеждение, что if key in dct:
медленное, неверно. Я вернулся и проверил книгу, в которой я читал, что лучше использовать try: except:
. Это 2002 Python Cookbook, рецепт 1.4 от Alex Martelli, который можно найти здесь также: Добавить запись в словарь. Старые воспоминания настолько ненадежны! В рецепте не упоминается "медленнее", и он даже не использует in
, но has_key
. Он просто говорит, что try: except:
более Pythonic (по крайней мере, книжная версия рецепта). Спасибо за исправление и ответы.