Credit: Andy McKay
You need to obtain a value from a dictionary, without having to handle an exception if the key you seek is not in the dictionary.
That’s what the
get
method of dictionaries is for. Say you have a dictionary:
d = {'key':'value'}
You can write a test to pull out the value of
'key'
from d
in an
exception-safe way:
if d.has_key('key'): # or, in Python 2.2 or later: if 'key' in d: print d['key'] else: print 'not found'
However, there is a much simpler syntax:
print d.get('key', 'not found')
Want to get a value from a dictionary but first make sure that the
value exists in the dictionary? Use the simple and useful
get
method.
If you try to get a value with a syntax such as
d[x]
, and the value of x
is not
a key in dictionary d
, your attempt raises a
KeyError
exception. This is often okay. If you
expected the value of x
to be a key in
d
, an exception is just the right way to inform
you that you’re wrong (i.e., that you need to debug
your program).
However, you often need to be more tentative about it: as far as you
know, the value of x
may or may not be a key in
d
. In this case, don’t start
messing with the has_key
method or with
try
/except
statements. Instead,
use the get
method. If you call
d.get(x)
, no exception is thrown: you get
d[x]
if x
is a key in
d
, and if it’s not, you get
None
(which you can check for or propagate). If
None
is not what you want to get when
x
is not a key of d
, call
d.get(x
, somethingelse
)
instead. In this case, if x
is not a key, you will
get the value of somethingelse
.
get
is a simple, useful mechanism that is well
explained in the Python documentation, but a surprising number of
people don’t know about it. This idiom is also quite
common in Zope, for example, when pulling variables out of the
REQUEST
dictionary.
Get Python Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.