我使用Counter来计算列表项的出现次数.我很难很好地展示它.对于以下代码,
category = Counter(category_list) print category
以下是输出,
Counter({'a': 8508, 'c': 345, 'w': 60})
我必须如下显示上述结果,
a 8508 c 345 w 60
我试图迭代计数器对象,但我没有成功.有没有办法很好地打印Counter操作的输出?
Counter
本质上是一个字典,因此它有键和相应的值 - 就像普通字典一样.从文档:
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
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