2013-07-29 9 views
11

ho un contatore che sembra un po 'come questo:l'ordinamento un contatore in pitone con i tasti

Counter: {('A': 10), ('C':5), ('H':4)} 

voglio ordinare sui tasti specificatamente in ordine alfabetico, non da counter.most_common()

v'è alcuna modo per raggiungere questo?

+0

Un contatore è fondamentalmente solo un dizionario, quindi questo dovrebbe essere considerato un duplicato di questo: http://stackoverflow.com/questions/9001509/python-dictionary-sort-by-key –

+0

Vuoi stamparli in un ordine ordinato? –

risposta

26

Basta usare sorted:

>>> from collections import Counter 
>>> counter = Counter({'A': 10, 'C': 5, 'H': 7}) 
>>> counter.most_common() 
[('A', 10), ('H', 7), ('C', 5)] 
>>> sorted(counter.items()) 
[('A', 10), ('C', 5), ('H', 7)] 
+0

Sono d'accordo, sapendo che l'iteratore su un ditt restituisce le chiavi, non i valori, quindi le chiavi verranno ordinate. –

6
>>> from operator import itemgetter 
>>> from collections import Counter 
>>> c = Counter({'A': 10, 'C':5, 'H':4}) 
>>> sorted(c.items(), key=itemgetter(0)) 
[('A', 10), ('C', 5), ('H', 4)] 
+2

Funziona, tuttavia, itemgetter è utile per ordinare un elenco di tuple o un elenco di liste, ma su un dit è inutile, ordinato (c) è equivalente a ordinato (c.keys()) –

0

In Python 3, è possibile utilizzare la funzione di most_common collections.Counter:

x = ['a', 'b', 'c', 'c', 'c', 'd', 'd'] 
counts = collections.Counter(x) 
counts.most_common(len(counts)) 

Questo utilizza la funzione most_common disponibile in collections.Counter , che consente di trovare le chiavi e i conteggi delle chiavi più comuni n.