2015-05-24 8 views
5

Ich habe die Liste wie folgt aus:Zählerliste Python 2.7

Pasang = [0, 4, 4, 5, 1, 7, 6, 7, 5, 7, 4, 9, 0, 10, 1, 10,...., 23, 9, 23, 7, 23] 

ich aus dieser Liste zählen Artikel:

satuan = Counter(pasang) 

dann bekomme ich:

Counter({5: 10, 6: 7, 0: 5, 1: 5, 7: 5, 10: 4, 11: 4, 15: 4,...,14: 1, 21: 1}) 

Ich möchte Schlüssel erhalten vom Zähler, also tue ich das:

satu = satuan.keys() 

und ich sortierte Liste wie folgt aus:

[0, 1, 2, 4, 5,...,21, 22, 23] 

aber ich brauche eine Ausgabe wie folgt (nicht sortiert):

[5, 6, 0, 1,...,14, 21] 

Sorry für mein schlechtes Englisch.

+6

sein Was meinen Sie * "nicht sortiert" *? Es sieht so aus, als ob Sie es ** wollen ** wollen, dass es sortiert wird, aber in der Reihenfolge der Zählung, in diesem Fall siehe ['Counter.most_common'] (https://docs.python.org/2/library/collections.html#collections .Counter.most_common). – jonrsharpe

+0

Ich denke, er meint "Nicht numerisch sortiert, aber in der gleichen Reihenfolge zeigt es in der' Counter' Objekt. – Barmar

Antwort

4

Sie wahrscheinlich brauchen:

[key for key, freq in c.most_common()] 

wo c die Counter Instanz ist.

most_common werden Tastenpaare und Frequenzen in absteigender Reihenfolge der Frequenz zurückgeben. Dann extrahieren Sie den Schlüssel mit einem Verständnis.

+0

Also warum 'Counter.keys' gibt ein sortiertes Ergebnis? – Kasramvd

+0

@Kasra Aus einigen Tests scheint es so .... – JuniorCompressor

+2

@Kasra, weil die Schlüssel Integer sind, die auf ihre eigenen Werte hasen – jonrsharpe

0

Wenn Sie die Reihenfolge beibehalten möchten, dann sehen Sie sich das Counter Objekt an, das Sie gerade erstellt haben die reverse Flagge True

import collections 
Pasang = [0, 4, 4, 5, 1, 7, 6, 7, 5, 7, 4, 9, 0, 10, 1, 10, 23, 9, 23, 7, 23] 

a = collections.Counter(Pasang) 

keys = sorted(a.keys(), key = lambda x:a[x], reverse = True) 
print a 
print keys 
>>> Counter({7: 4, 4: 3, 23: 3, 0: 2, 1: 2, 5: 2, 9: 2, 10: 2, 6: 1}) 
>>> [7, 4, 23, 0, 1, 5, 9, 10, 6]