2016-08-30 3 views
-1

Ich habe eine Liste, die Wörter enthält. Ich möchte die häufigsten Wörter in meiner Liste wissen. Ich habe versucht, 'Counter' aus dem Sammlungspaket zu verwenden.finden Sie die häufigsten Wörter in einer Liste (ohne Frequenz-Nr.)

result = Counter(z).most_common(5) 

und ich habe dieses Ergebnis.

result 
>>[('abc', 893), ('op', 198), ('bff', 172), ('ppf', 140), ('request', 119)] 

aber ich will nur die Wörter und nicht die Häufigkeit nein. damit verbunden. wie

['abc','op','bff','ppf','request'] 

Antwort

0

Verwenden Liste Verständnis sie von result zu extrahieren:

print([res[0] for res in result]) 
0

Sie den Index und die Liste Verständnis verwenden können:

result = Counter(z).most_common(5) 
result = [i[0] for i in result] 

Oder in einer Zeile:

result = [i[0] for i in Counter(z).most_common(5)] 
0

von HERE Zähler ist langsamer als Standarddict. wenn die Leistung wichtig ist dies versuchen:

import operator 
from collections import defaultdict 

counter = defaultdict(int) 
foods = ['soy', 'dairy', 'gluten', 'soy'] 
for k in foods: 
    counter[k] += 1 
most_common = 5 
# counter includes a dictionary(without order) 
# here we sort dictionary(this may needs more time than above link shows): 
result = list(zip(*sorted(counter.items(), key=operator.itemgetter(1), reverse=True)[:most_common]))[0] 
+0

Es ist Ausgabereihenfolge zufällig ist .. Ich habe Ausgabe wie: '[‚Gluten‘,‚Milch‘]' Aber es sollte 'sein [‚Soja‘,‚Milch‘] 'oder' ['soja', 'gluten'] 'und wenn ich versuche, counter zu drucken:' print (counter) ', habe ich ausgegeben:' defaultdict (, {'gluten': 1, 'soy': 2, 'Molkerei': 1}) ' –

+0

@KalpeshDusane Entschuldigung. Code aktualisiert :) –

+0

Können wir normales Wörterbuch anstelle von defaultdict verwenden? Ich habe versucht, und es funktioniert: 'counter = {} Lebensmittel = [ 'Soja', 'Milch', 'Gluten', 'Soja'] für k in Lebensmitteln: \t wenn k in Zählern: \t \t Zähler [k ] + = 1 \t sonst: \t \t counter [k] = 1' Gibt es Unterschiede in der Leistung? –

Verwandte Themen