python sorting collections counter

install collections python



¿Cómo ordenar Contador por valor?-pitón (3)

Además de hacer una lista de comprensiones de la lista invertida, ¿hay una forma pitón de ordenar Contador por valor? Si es así, es más rápido que esto:

>>> from collections import Counter >>> x = Counter({''a'':5, ''b'':3, ''c'':7}) >>> sorted(x) [''a'', ''b'', ''c''] >>> sorted(x.items()) [(''a'', 5), (''b'', 3), (''c'', 7)] >>> [(l,k) for k,l in sorted([(j,i) for i,j in x.items()])] [(''b'', 3), (''a'', 5), (''c'', 7)] >>> [(l,k) for k,l in sorted([(j,i) for i,j in x.items()], reverse=True)] [(''c'', 7), (''a'', 5), (''b'', 3)


Sí:

>>> from collections import Counter >>> x = Counter({''a'':5, ''b'':3, ''c'':7})

Usando la clave de palabra clave ordenada y una función lambda:

>>> sorted(x.items(), key=lambda i: i[1]) [(''b'', 3), (''a'', 5), (''c'', 7)] >>> sorted(x.items(), key=lambda i: i[1], reverse=True) [(''c'', 7), (''a'', 5), (''b'', 3)]

Esto funciona para todos los diccionarios. Sin embargo, Counter tiene una función especial que ya le proporciona los elementos ordenados (desde los más frecuentes hasta los menos frecuentes). Se llama most_common() :

>>> x.most_common() [(''c'', 7), (''a'', 5), (''b'', 3)] >>> list(reversed(x.most_common())) # in order of least to most [(''b'', 3), (''a'', 5), (''c'', 7)]

También puede especificar cuántos elementos desea ver:

>>> x.most_common(2) # specify number you want [(''c'', 7), (''a'', 5)]


Una buena adición a la respuesta de @MartijnPieters es recuperar un diccionario ordenado por ocurrencia ya que Collections.most_common solo devuelve una tupla. A menudo comparo esto con una salida json para archivos de registro prácticos:

from collections import Counter, OrderedDict x = Counter({''a'':5, ''b'':3, ''c'':7}) y = OrderedDict(x.most_common())

Con la salida:

OrderedDict([(''c'', 7), (''a'', 5), (''b'', 3)]) { "c": 7, "a": 5, "b": 3 }


Use el método Counter.most_common() , clasificará los artículos por usted :

>>> from collections import Counter >>> x = Counter({''a'':5, ''b'':3, ''c'':7}) >>> x.most_common() [(''c'', 7), (''a'', 5), (''b'', 3)]

Lo hará de la manera más eficiente posible; si solicita un N superior en lugar de todos los valores, se usa un heapq lugar de uno recto:

>>> x.most_common(1) [(''c'', 7)]

Fuera de los contadores, la clasificación siempre se puede ajustar en función de una función key ; .sort() y sorted() ambos toman llamadas que le permiten especificar un valor para ordenar la secuencia de entrada; sorted(x, key=x.get, reverse=True) le daría la misma clasificación que x.most_common() , pero solo devuelve las claves, por ejemplo:

>>> sorted(x, key=x.get, reverse=True) [''c'', ''a'', ''b'']

o puede ordenar solo los pares de valores dados (key, value) :

>>> sorted(x.items(), key=lambda pair: pair[1], reverse=True) [(''c'', 7), (''a'', 5), (''b'', 3)]

Consulte el método de ordenación de Python para obtener más información.