Можете ли вы сделать счетчик без выписки «Счетчик»?

Поэтому, когда я печатаю счетчик ( from collections import Counter ) в файл, я всегда получаю это литерал Counter ({'Foo': 12})

Так или иначе, чтобы счетчик не выписывался так буквально? Поэтому вместо « Counter({'Foo' : 12}) вместо « Counter({'Foo' : 12}) следует написать {'Foo' : 12} .

Да, это придирчиво, но после этого я устал от этого.

4 Solutions collect form web for “Можете ли вы сделать счетчик без выписки «Счетчик»?”

Вы можете просто передать Counter :

 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} 

Мне лучше нравится идея Дж. Бернардо, хотя:

 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 строит dict из Counter .

Как насчет того, чтобы форматировать его в форму, которую вы хотите?

 >>> 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}" 

Ну, это не очень элегантно, но вы можете просто бросить его как строку и отрезать первые 8 и последние 1 буквы:

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

Вы можете изменить метод __str__ класса счетчика, перейдя в исходный код модуля коллекций, но я бы не сказал, что это постоянно его модифицирует. Может быть, просто изменить то, что вы печатаете, было бы более выгодным?

Python - лучший язык программирования в мире.