2016-10-22 2 views
0

Also, in meinem Code ich ein Wörterbuch habe ich verwenden, um Elemente zu zählen ich keine Vorkenntnisse haben:bessere Weg ‚zuweisen A oder falls dies nicht möglich - B‘ schreiben

if a_thing not in my_dict: 
    my_dict[a_thing] = 0 
else: 
    my_dict[a_thing] += 1 

Offensichtlich kann ich Inkrementiere einen Eintrag eines Wertes, der noch nicht existiert. Aus irgendeinem Grund habe ich ein Gefühl (in meinem noch immer Python-unerfahrenen Gehirn) könnte es eine pythonischere Art geben, dies zu tun, sagen wir, ein Konstrukt, das es erlaubt, einem Ding ein Ergebnis eines Ausdrucks zuzuordnen und wenn möglich etwas sonst in einer einzigen Anweisung.

Gibt es so etwas in Python?

Antwort

5

Das sieht nach einem guten Job für defaultdict, aus collections. Beachten Sie das folgende Beispiel:

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

defaultdict einen einzigen Parameter nehmen, die Ihr Anfangswert angibt. In diesem Fall werden Integer-Werte inkrementiert, sodass Sie int möchten.

Alternativ kann, da Sie Elemente zählen, können Sie auch (wie in den Kommentaren erwähnt) verwenden Counter die letztlich die ganze Arbeit für Sie tun:

>>> d = Counter(['a', 'b', 'a', 'c', 'a', 'b', 'c']) 
>>> d 
Counter({'a': 3, 'c': 2, 'b': 2}) 

Es kommt auch mit einigen netten Boni. Wie most_common:

>>> d.most_common() 
[('a', 3), ('c', 2), ('b', 2)] 

Jetzt haben Sie eine Bestellung Sie die häufigsten zählt zu geben.

+1

Beachten Sie, dass 'defaultdict (int)' ist im Grunde 'collections.Counter()' – vaultah

+0

@vaultah Ja. Vielen Dank. Das * sollte * die erste Lösung gewesen sein, an die ich gedacht habe. Ich habe es hinzugefügt. – idjaw

1

mit get Methode

>>> d = {} 
>>> d['a'] = d.get('a', 0) + 1 
>>> d 
{'a': 1} 
>>> d['b'] = d.get('b', 2) + 1 
>>> d 
{'b': 3, 'a': 1} 
Verwandte Themen