因此,当我将计数器(from collections import Counter
)打印到文件时,我总是得到文字Counter ({'Foo': 12})
反正是否让计数器没有如此字面地写出来?因此,它会写{'Foo' : 12}
而不是Counter({'Foo' : 12})
。
是的,它很挑剔,但我后来因为文件中的问题而感到厌烦。
答案 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__方法,但我不建议将其永久修改它。也许只是改变你打印的内容会更有益吗?