2015-05-24 23 views
5

Mam lista tak:Counter lista 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] 

liczę pozycję z tej listy:

satuan = Counter(pasang) 

następnie uzyskać:

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

Chcę dostać klucz z licznika, więc robię to:

satu = satuan.keys() 

i uzyskać posortowaną listę tak:

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

ale muszę wyjście tak (bez sortowania):

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

przepraszam za mój zły język angielski.

+6

Co masz na myśli * "nie sortowane" *? Wygląda na to, że ** chcesz ** chcesz to posortować, ale według porządku, w takim przypadku zobacz ['Counter.most_common'] (https://docs.python.org/2/library/collections.html#collections .Counter.most_common). – jonrsharpe

+0

Myślę, że ma na myśli "Nie posortowane numerycznie, ale w tej samej kolejności, w jakiej pokazuje obiekt" Counter " – Barmar

Odpowiedz

4

Prawdopodobnie trzeba:

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

gdzie c jest instancja Counter.

most_common spowoduje powrót par klawiszy i częstotliwości, w kolejności malejącej częstotliwości. Następnie wyodrębniasz kluczową część za pomocą zrozumienia.

+0

Dlaczego więc' Counter.keys' zwraca posortowany wynik? – Kasramvd

+0

@Kasra Z niektórych testów wydaje się tak .... – JuniorCompressor

+2

@Kasra, ponieważ klucze są liczbami całkowitymi, które mieszają się z własnymi wartościami – jonrsharpe

0

Jeśli chcesz zachować porządek, obejrzyj właśnie utworzony obiekt Counter, elementy są posortowane według częstotliwości w malejącej kolejności i możesz osiągnąć to samo zachowanie, sortując klawisze na częstotliwości i ustawieniach Flaga reverse być 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]