2012-10-20 99 views
15

在Python這很煩人有檢查某個鍵是否在字典中第一遞增之前:Python字典增量

if key in my_dict: 
    my_dict[key] += num 
else: 
    my_dict[key] = num 

是否有上述四行較短的替代品?

+0

你可以對兩個值做同樣的事嗎? – Mohsin

回答

33

另一種方法是:

my_dict[key] = my_dict.get(key, 0) + num 
+0

你可以做多個值嗎?我的意思是增加一個以上的值 – Mohsin

+1

沒有循環?由於'dict'沒有提供在單個表達式中訪問多個元素的方法,我不知道如何。 –

+0

就像OP在他的問題中寫道的循環,但每個鍵增加兩個值不是一個 – Mohsin

14

你有好幾個選擇。我喜歡用Counter

>>> from collections import Counter 
>>> d = Counter() 
>>> d[12] += 3 
>>> d 
Counter({12: 3}) 

或者defaultdict

>>> from collections import defaultdict 
>>> d = defaultdict(int) # int() == 0, so the default value for each key is 0 
>>> d[12] += 3 
>>> d 
defaultdict(<function <lambda> at 0x7ff2fe7d37d0>, {12: 3}) 
+1

對於'lambda:0',你可以說'int'。 – hughdbrown

+1

@hughdbrown:謝謝,我從來不知道。 – Blender

+0

@hughdbrown沒有你的評論我永遠不會明白什麼是defaultdict在做什麼。謝謝。 –

4

變換:

if key in my_dict: 
    my_dict[key] += num 
else: 
    my_dict[key] = num 

以下使用setdefault到:

my_dict[key] = my_dict.setdefault(key, 0) + num