I usually use the following idiom when working with a Python dictionary:
try:
    val = dct[key]
except KeyError:
    print key, " is not valid"
since for large dictionaries, the statement
if key in dct:
    # do something
is not very efficient (so I remember reading, but I've noticed it in practice as well)
Today I was working with a defaultdict and for a moment I forgot that a defaultdict will never give you a KeyError but instead will update the original dictionary.
How can I perform a lookup without updating the defaultdict? I really need to print an error so that the user can reenter the key.
Thank you!
UPDATE: Several posters suggested that my belief that if key in dct: is slow is false. I went back and checked the book in which I had read that is better to use try: except:. It is 2002's Python Cookbook, Recipe 1.4 by Alex Martelli, which can be found also online here: Add an entry to dictionary. Old memories are so unreliable! The recipe doesn't mention "slower" and it's not even using in but has_key. It simply says that try: except: is more Pythonic (at least the book version of the recipe). Thanks for the correction and the answers.
 
     
     
    