你能让Counter不写出“Counter”吗?

时间:2013-04-19 00:19:19

标签: python counter

因此,当我将计数器(from collections import Counter)打印到文件时,我总是得到文字Counter ({'Foo': 12})

反正是否让计数器没有如此字面地写出来?因此,它会写{'Foo' : 12}而不是Counter({'Foo' : 12})

是的,它很挑剔,但我后来因为文件中的问题而感到厌烦。

4 个答案:

答案 0 :(得分:5)

您可以将Counter传递给dict

counter = collections.Counter(...)
counter = dict(counter)

In [56]: import collections

In [57]: counter = collections.Counter(['Foo']*12)

In [58]: counter
Out[58]: Counter({'Foo': 12})

In [59]: counter = dict(counter)

In [60]: counter
Out[60]: {'Foo': 12}

我更喜欢JBernardo的想法:

In [66]: import json

In [67]: counter
Out[67]: Counter({'Foo': 12})

In [68]: json.dumps(counter)
Out[68]: '{"Foo": 12}'

这样,你不会丢失counter的特殊方法,比如most_common,并且当Python从Counter构建dict时,你不需要额外的临时内存。

答案 1 :(得分:1)

如何将其明确格式化为您想要的表单?

>>> import collections
>>> data = [1, 2, 3, 3, 2, 1, 1, 1, 10, 0]
>>> c = collections.Counter(data)
>>> '{' + ','.join("'{}':{}".format(k, v) for k, v in c.iteritems()) + '}'
"{'0':1,'1':4,'2':2,'3':2,'10':1}"

答案 2 :(得分:0)

嗯,这不是很优雅,但你可以简单地把它作为一个字符串,并切掉前8个和后1个字母:

x = Counter({'Foo': 12})
print str(x)[8:-1]

答案 3 :(得分:-1)

您可以通过进入集合模块的源代码来更改计数器类的__str__方法,但我不建议将其永久修改它。也许只是改变你打印的内容会更有益吗?