2012-10-20 4 views
15

In Python es ärgerlich zu haben, um zu überprüfen, ob ein Schlüssel im Wörterbuch ist es zunächst vor Inkrementieren:Python Wörterbuch Schritt

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

Gibt es einen kürzeren Ersatz für die vier Linien oben?

+0

können Sie das gleiche für zwei Werte tun? – Mohsin

Antwort

33

Eine Alternative ist:

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

können Sie es für mehrere Werte tun? Ich meine mehr als einen Wert erhöhen – Mohsin

+1

Ohne eine Schleife? Da 'dict' keine Möglichkeit bietet, auf mehrere Elemente in einem einzelnen Ausdruck zuzugreifen, sehe ich nicht wie. –

+0

Mit einer Schleife genau wie das OP schreibt in seiner Frage, aber zwei Werte pro Schlüssel inkrementieren nicht eine – Mohsin

14

Sie haben durchaus ein paar Optionen. Ich mag mit Counter:

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

Oder 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

Für 'Lambda: 0' können Sie einfach' int' sagen. – hughdbrown

+1

@hughdbrown: Danke, das habe ich nie gewusst. – Blender

+0

@hughdbrown ohne deinen Kommentar Ich hätte nie verstanden, was ein Standarddict tat. Vielen Dank. –

4

verwandeln:

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

in das folgende mit setdefault:

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