Python Cookbook 2Nd Edition Jun 1002005 [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Python Cookbook 2Nd Edition Jun 1002005 [Electronic resources] - نسخه متنی

David Ascher, Alex Martelli, Anna Ravenscroft

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید







Recipe 4.9. Getting a Value from a Dictionary


Credit: Andy McKay


Problem


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.


Solution


That's what the
get method of dictionaries is for. Say you have a
dictionary such as d =
{'key':'value',}
. To get the value corresponding to
key in d in an
exception-safe way, code:

print d.get('key', 'not found')

If you need to remove the entry after you have obtained the value,
call d.pop (which does
a get-and-remove) instead of
d.get (which just reads
d and never changes it).


Discussion


Want to get a value for a key from a dictionary, without getting an
exception if the key does not exist in the dictionary? Use the simple
and useful get method of the dictionary.

If you try to get a value with the indexing syntax
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 mistaken (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 in
tests, such as:

if 'key' in d:
print d['key']
else:
print 'not found'

or try/except statements, such
as:

try:
print d['key']
except KeyError:
print 'not found'

Instead, use the get method, as shown in the
"Solution". 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. Another similar method
is pop, which is mostly like
get, except that, if the key was in the
dictionary, pop also removes it. Just one caveat:
get and pop are not
exactly parallel. d.pop(x)
does raise KeyError if
x is not a key in
d; to get exactly the same effect as
d.get(x), plus the entry removal, call
d.pop(x,None) instead.


See Also


Recipe 4.10; the
Library Reference and Python in a
Nutshell
sections on mapping types.


/ 394