2016-07-20 12 views
5

當使用Python 3個字典,我一直有做這樣的事情:如何本地遞增字典元素的值?

d=dict() 
if 'k' in d: 
    d['k']+=1 
else: 
    d['k']=0 

我似乎記得那裏是做這個原生的方式,但一直在尋找通過的文件,但沒有找到它。你知道這是什麼嗎?

回答

12

這是collections.defaultdict的用例,這裏簡單地使用int可調用默認工廠。

>>> from collections import defaultdict 
>>> d = defaultdict(int) 
>>> d 
defaultdict(<class 'int'>, {}) 
>>> d['k'] +=1 
>>> d 
defaultdict(<class 'int'>, {'k': 1}) 

A defaultdict被配置爲每當搜索到缺失的密鑰時創建項目。您爲它提供了一個可調用的函數(這裏是int()),只要通過__getitem__的查找傳遞了一個不存在的密鑰,就會使用它來生成默認值。該可調用對象存儲在一個名爲default_factory的實例屬性中。

如果您沒有提供default_factory,那麼按照慣例,您會得到一個KeyError,用於丟失密鑰。

然後假設你想要一個不同的默認值,也許是1而不是0只需將必須通過調用提供您所需的初始值,在這種情況下,很平凡

>>> d = defaultdict(lambda: 1) 

這可能也很明顯是任何常規的命名函數。


值得一但指出的是,如果你的情況,你正試圖只用字典來存儲特定值的計數,collections.Counter更適合這份工作。

>>> from collections import Counter 
>>> Counter('kangaroo') 
Counter({'a': 2, 'o': 2, 'n': 1, 'r': 1, 'k': 1, 'g': 1}) 
0

留意,你總是可以通過在表達式中使用它刪除從if stamemt雜波:

d['k'] = d['k'] + 1 if 'k' in d else 0