我使用Counter来计算列表项的出现次数。我很难很好地展示它。对于以下代码,
category = Counter(category_list)
print category
以下是输出
Counter({'a': 8508, 'c': 345, 'w': 60})
我必须按如下方式显示上述结果,
a 8508
c 345
w 60
我试图迭代计数器对象,但我没有成功。有没有办法很好地打印Counter操作的输出?
答案 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}