¿Puedes hacer Contador no escribir “Contador”?

Así que cuando imprimo el Contador ( from collections import Counter ) a un archivo, siempre obtengo este Counter ({'Foo': 12}) literal Counter ({'Foo': 12})

¿Hay alguna forma de hacer que el contador no escriba tan literalmente? Así que en su lugar escribiría {'Foo' : 12} lugar de Counter({'Foo' : 12}) .

Sí, es delicado, pero estoy harto de que me arreglé la cosa de mis archivos después.

Usted podría simplemente pasar el Counter a 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} 

Aunque me gusta más la idea de JBernardo:

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

De esa manera, no perderá los métodos especiales del counter , como la most_common , y no necesitará memoria temporal adicional mientras Python construye un dict a partir de un Counter .

¿Qué hay de formatearlo explícitamente en la forma que desee?

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

Bueno, esto no es muy elegante, pero simplemente puedes lanzarlo como una cuerda y cortar las primeras 8 y las últimas 1 letras:

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

Puedes cambiar el método __str__ de la clase de contador ingresando en el código fuente del módulo de colecciones, pero no sugeriría que eso lo modifique permanentemente. ¿Tal vez solo sería más beneficioso cambiar lo que imprime?