格式化计数器的输出

时间:2013-12-01 19:35:50

标签: python

我使用Counter来计算列表项的出现次数。我很难很好地展示它。对于以下代码,

category = Counter(category_list)
print category

以下是输出

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

我必须按如下方式显示上述结果,

a 8508
c 345
w 60

我试图迭代计数器对象,但我没有成功。有没有办法很好地打印Counter操作的输出?

4 个答案:

答案 0 :(得分:18)

Counter本质上是一个字典,因此它具有键和相应的值 - 就像普通字典一样。 来自documentation

  

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

然而,you shouldn't rely on the order of keys in dictionaries

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

答案 1 :(得分:5)

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

<强>演示:

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

答案 2 :(得分:1)

这有效:

>>> 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的参考资料。

答案 3 :(得分:0)

如果您不关心在开头和结尾都有方括号,则可以使用pprint。它会为您按字母顺序对计数器进行排序。

import pprint
from collections import Counter

category = Counter({'a': 8508, 'c': 345, 'w': 60})
pprint.pprint(dict(category),width=1)

输出:

{'a': 8508,
 'c': 345,
 'w': 60}