2016-08-01 6 views
0

Zählen Wenn i Elemente verschiedener Art zählen müssen, finde ich mich so etwas wie schreiben:Python hashmap Verwendung für Elemente

if k not in removed: 
    removed[k] = 0 
removed[k] = removed[k] + 1 

Manchmal muss ich die gleiche Sache mit einer neuen leeren Liste, die im Laufe der Zeit wachsen wird. Der obige Code funktioniert gut, aber es fühlt sich an, als ob es einen besseren Weg gibt, es zu schreiben. Gibt es?

+1

Ich denke, dass Sie http://codereview.stackexchange.com/ suchen könnten. Diese Seite ist für Code, der nicht funktioniert. 'CodeReview' ist für Code, der funktioniert, aber Sie möchten es besser machen. :) – Dobz

+5

Das klingt wie ein Job für [Counter] (https://docs.python.org/3/library/collections.html#collections.Counter). – alexpeits

+2

Sie können das etwas besser machen, indem Sie ein [defauldict] (https://docs.python.org/3/library/collections.html#collections.defaultdict) anstelle eines einfachen Diktats verwenden. Es gibt auch eine [Counter] (https://docs.python.org/3/library/collections.html#collections.Counter) -Klasse, die einige leistungsfähige Methoden hat, aber es läuft etwas langsamer, wenn Geschwindigkeit ein Problem ist defaultdict, es sei denn, Sie möchten diese Counter-Methoden verwenden. –

Antwort

1

Zusätzlich zu defaultdict/Counter, das in Kommentaren erwähnt wird, können Sie auch einen Standardwert von einem fehlgeschlagenen get zurückgegeben haben. Auf diese Weise können Sie die anfängliche Anzahl auf 0 setzen, wenn die Schlüsselsuche fehlschlägt, und sofort um 1 erhöhen oder bei jedem Durchlauf des Schlüssels um 1 erhöhen.

vehicles = ['car', 'bike', 'truck', 'car', 'truck', 'truck'] 

my_dict = {} 
for k in vehicles: 
    my_dict[k] = my_dict.get(k, 0) + 1 
0

Eine Möglichkeit, dies zu tun:

countdict = dict() 
for k in inputlist: 
    if k not in countdict.keys(): 
     countdict[k] = inputlist.count(k) 
Verwandte Themen