Форматирование вывода счетчика - программирование

Форматирование вывода счетчика

Я использовал счетчик для подсчета количества элементов списка. У меня проблемы с отображением. Для приведенного ниже кода

category = Counter(category_list)
print category

выводится следующий результат:

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

Мне нужно отобразить вышеприведенный результат следующим образом:

a 8508
c 345
w 60

Я попытался выполнить итерацию объекта-счетчика, но я не увенчался успехом. Есть ли способ распечатать результат работы счетчика?

4b9b3361

Ответ 1

Counter по существу является словарем, поэтому он имеет ключи и соответствующие значения - как обычный словарь. Из документа :

Счетчик является подклассом dict для подсчета хешируемых объектов. Это неупорядоченный сбор, где элементы хранятся как словарные ключи и их количество хранится в виде значений словаря.

Вы можете использовать этот код:

>>> 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

Однако вы не должны полагаться на порядок ключей в словарях.

Counter.most_common очень полезен. Ссылаясь на связанную документацию:

Возвращает список из n наиболее распространенных элементов и их количество из наиболее распространенный по меньшей мере. Если n не указано, most_common() возвращает все элементы в стойке. Элементы с равным числом отсчетов упорядочены произвольно.

(выделено курсивом)

>>> 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

Ответ 2

print вызывает __str__ метод класса Counter, поэтому вам нужно переопределить это, чтобы получить этот вывод для операции печати. ​​

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

Demo:

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

Ответ 3

Это работает:

>>> 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
>>>

Вот ссылка на sorted и на dict.iteritems.