2011-11-01 29 views
5

Como dice el título, necesito escribir una función que clasifique una lista por frecuencia de letras. Normalmente proporcionaría mi código con lo que tengo hasta ahora, pero no tengo idea de dónde empezar. Estoy seguro de que es algo simple, pero no sé qué hacer. Los necesito ordenados en orden decreciente, cualquier ayuda es apreciada, gracias.Ordenar una lista por frecuencia de letra en python (orden decreciente)

+1

Una lista de qué? ¿Palabras? –

Respuesta

9

en Python 2.7 o más alto se puede utilizar un contador: http://docs.python.org/dev/library/collections.html#collections.Counter

>>> mywords = ['red', 'blue', 'red', 'green', 'blue', 'blue'] 
>>> cnt = Counter(mywords) 
>>> cnt 
Counter({'blue': 3, 'red': 2, 'green': 1}) 

según Sorted Word frequency count using python

si necesita letras en vez de palabras se puede ir así:

>>> mywords = ['red', 'blue', 'red', 'green', 'blue', 'blue'] 
>>> myletters=list("".join(mywords)) 
>>> myletters 
['r', 'e', 'd', 'b', 'l', 'u', 'e', 'r', 'e', 'd', 'g', 'r', 'e', 'e', 'n', 'b', 'l', 'u', 'e', 'b', 'l', 'u', 'e'] 
>>> Counter(myletters) 
4

Para Python2.7 +, utilice un collections.Counter y su most_common método:

import collections 

text='abccccabcbb' 
count=collections.Counter(text) 

print(count.most_common()) 
# [('c', 5), ('b', 4), ('a', 2)] 

print(''.join(letter*freq for letter,freq in count.most_common())) 
# cccccbbbbaa 

Para Python2.6 o inferior, usted podrá utilizar el equivalente Counter recipe.

Cuestiones relacionadas