2007-09-05

 

Python Cookbook 4.9 从字典中获得值

需求:

你需要从一个字典中获得值,而且不用处理异常情况,比如该值不存在.

讨论:

dict的get方法就能满足需求.比如你有一个字典d = {'key':'value'}.为了获得key所对应的值,并不考虑异常情况,使用:

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

如果你想用完该数据后就删除它,请使用dict.pop(它进行get和remove操作),而不是dict.get(它不会执行remove操作).
要想获得一个数值,而且不希望遇到异常,就是用get方法.
如果你使用索引值来访问d[x],如果x对应的值在d中不存在,你就会获得KeyError异常,这个很正常,如果你需要的值在dict中不存在, 它就会以异常的方式提示你出错了.有时你只是想试探一下,看x对应的值在字典中是否存在,这样的情况下,不要使用in语句:

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

使用try/except语法:

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

和上面的处理不同,如果你使用get(x)语法,不会有异常抛出:如果x对应的值存在,将返回它,如果不存在, 会返回None.如果你不希望它返回None,可以使用d.get(x,somethingelse),在这种情况下,如果x对应的值不存在,不会返回None,而是somethingelse.
get是一个非常简单的方法,而且Python的文档中也描述的很详细,但是还有很多人都不知道它.与此类似,pop是另一个函数,它的大部分用法都和get相同.唯一不同的是,pop可以返回异常,当x不是d中的一个key是,d.pop(x)会抛出KeyError异常,如果你希望它的用法和get完全一样, 使用d.pop(x,None).

相关说明:

get(...)
    D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.

pop(...)
    D.pop(k[,d]) -> v, remove specified key and return the corresponding value
    If key is not found, d is returned if given, otherwise KeyError is raised


Comments: 发表评论



<< Home

This page is powered by Blogger. Isn't yours?