從字典中擷取一個值
此文章轉載於http://blog.sina.com.cn/s/blog_6be89284010183xm.html
問題 :
你需要從字典中獲得一個值,不要處理在字典裡找不到你所需要的索引值的異常。
那就是字典的get方法。 如果你有一個字典
Python代碼
- d = {'key':'value'}
在一個異常安全的方法中,你能夠寫一個從d中提取‘key’的值的測試
Python代碼
- if d.has_key('key'): # or, in Python 2.2 or later: if 'key' in d:
- print d['key']
- else:
- print 'not found'
然而有一個更簡單的方法
print d.get('key', 'not
found')
Python代碼
- print d.get('key', 'not found')
討論
想從一個字典獲得一個值,但是首先要確信這個值是否在這個字典裡?使用簡單有效get方法。
如果你試著用像d[x] 那樣的文法來獲得一個值,並且x的值不是字典d的索引值, 你的嘗試將拋出一個KeyError異常。 這個是經常有用的。如果你期望x的值是d中的一個索引值,一個異常是通知你犯錯了的正確途徑。(那就是說,你需要調試你的程式了)
然而,關於它,你經常需要更多的假設:直到你知道x的值或者是或者不是d中的一個索引值。在這種情況下,忘掉has_key 方法或者try/except語句。 取而代之的,使用get方法。如果你調用d.get(x) ,沒有異常被拋出。如果x是d的一個索引值,你得到d[x]。如果不是,你得到None(你能檢查或者傳播它)。
當x不是d的索引值的時候,如果None不是你想要的,調用d.get(x, somethingelse) 來替代。在這種情況下,如果x不是一個索引值。你將得到somethingelse的值
Get是簡單,有效機制,python的文檔很好的解釋了它。但是不知道它的人的數量令人驚訝。當抽取REQUEST字典的一些值的時候,這個慣用方法在zope中也是相當普遍的。