Formato de salida de contador

He usado Contador para contar el número de ocurrencias de los elementos de la lista. Tengo problemas para mostrarlo muy bien. Para el siguiente código,

category = Counter(category_list) print category 

la siguiente es la salida,

 Counter({'a': 8508, 'c': 345, 'w': 60}) 

Tengo que mostrar el resultado anterior de la siguiente manera,

 a 8508 c 345 w 60 

Intenté recorrer el objeto del contador pero no lo conseguí. ¿Hay alguna manera de imprimir bien la salida de la operación del contador?

Counter es esencialmente un diccionario, por lo tanto, tiene claves y valores correspondientes, al igual que el diccionario normal. De la documentación :

Un contador es una subclase dict para contar objetos hashable. Es una colección desordenada donde los elementos se almacenan como claves de diccionario y sus conteos se almacenan como valores de diccionario.

Puedes usar este código:

 >>> category = Counter({'a': 8508, 'c': 345, 'w': 60}) >>> category.keys() dict_keys(['a', 'c', 'w']) >>> for key, value in category.items(): ... print(key, value) ... a 8508 c 345 w 60 

Sin embargo, no debe confiar en el orden de las claves en los diccionarios .

Counter.most_common es muy útil. Citando la documentación que he vinculado:

Devuelva una lista de los n elementos más comunes y sus conteos de los más comunes a los menos . Si no se especifica n , most_common () devuelve todos los elementos en el contador. Los elementos con igual conteo se ordenan arbitrariamente.

(énfasis añadido)

 >>> category.most_common() [('a', 8508), ('c', 345), ('w', 60)] >>> for value, count in category.most_common(): ... print(value, count) ... a 8508 c 345 w 60 

método de las llamadas de print __str__ de la clase Counter , por lo que debe anularlo para obtener esa salida para la operación de impresión.

 from collections import Counter class MyCounter(Counter): def __str__(self): return "\n".join('{} {}'.format(k, v) for k, v in self.items()) 

Manifestación:

 >>> c = MyCounter({'a': 8508, 'c': 345, 'w': 60}) >>> print c a 8508 c 345 w 60 

Esto funciona:

 >>> from collections import Counter >>> counter = Counter({'a': 8508, 'c': 345, 'w': 60}) >>> for key,value in sorted(counter.iteritems()): ... print key, value ... a 8508 c 345 w 60 >>> 

Aquí hay una referencia en sorted y otra en dict.iteritems .