一、鍵的存在性(The 「Are You There?」)程序員
不推薦的:app
dct.has_key(key)
Python的作法:測試
key in dct
二、Yoda 測試(The 「Yoda Test」)code
對於那些精通 「Are Your There」 的程序員,還有一個簡單的一樣也很惱人的行爲,不單單對於dict而言,它很廣泛對象
若是你非要Notget
not key in dct
English,你會說麼?:it
key not in dct
三、不管如何都要取到值(The 「Get The Value Anyway」)io
這個是至關流行。你有一個dict和key,而且你想修改key對應的值,好比給它自增1(假如你在數數)。import
比較遜一點的作法::程序
if key not in dct: dct[key] = 0 dct[key] = dct[key] + 1
漂亮的作法:
dct[key] = dct.get(key, 0) + 1
四、讓它發生!(The 「Make it Happen」)
有時你的字典裏都是常常修改的對象,你須要初始化一些數據到這個字典,也須要修改其中的一些值。好比說,你在維護一個這樣的dict:它的值都是鏈表。
寫一個實現就是:
dct = {} for (key, value) in data: if key in dct: dct[key].append(value) else: dct[key] = [value]
更Pythonic的作法是:
dct = {} for (key, value) in data: group = dct.setdefault(key, []) # key might exist already group.append(value)
setdefault(key, default) 所作的是:若是存在,返回 dct[key] , 不存在則把 dct[key] 設爲 default 並返回它。當一個默認的值是一個你能夠修改的對象的時候這是頗有用的。
使用 defaultdict
from collections import defaultdict dct = defaultdict(list) for (key, value) in data: dct[key].append(value)
defaultdict 很是棒, 它每生成一對新的 key-value ,就會給value一個默認值, 這個默認值就是 defaultdict 的參數。(注:defaultdict在模塊 collections 中)