Clase de contador de Python: agregar o incrementar un solo elemento

Un set usa .update para agregar varios elementos, y .add para agregar uno solo. ¿Por qué las collections.Counter no funcionan de igual manera?

Para incrementar un solo elemento del Counter utilizando Counter.update , debe agregarlo a una lista:

 c = Counter() for item in something: for property in properties_of_interest: if item.has_some_property: # pseudocode: more complex logic here c.update([item.property]) elif item.has_some_other_property: c.update([item.other_property]) # elif... etc 

¿Puedo hacer que Counter actúe como un set (es decir, eliminar tener que poner la propiedad en una lista)?

Edición: Caso de uso: Imagine un caso en el que tenga algunos objetos desconocidos, e intente muchas cosas diferentes rápidamente para descubrir algunas cosas preliminares sobre ellos: el rendimiento y la escala no son importantes, y una comprensión haría que sumr y restar lógica pérdida de tiempo.

Bueno, realmente no necesitas usar métodos de Counter para contar, ¿verdad? Hay un operador += para eso, que también funciona en conjunto con Counter.

 c = Counter() for item in something: if item.has_some_property: c[item.property] += 1 elif item.has_some_other_property: c[item.other_property] += 1 elif item.has_some.third_property: c[item.third_property] += 1 
 >>> c = collections.Counter(a=23, b=-9) 

Puedes agregar un nuevo elemento y establecer su valor de esta manera:

 >>> c['d'] = 8 >>> c Counter({'a': 23, 'd': 8, 'b': -9}) 

Incremento:

 >>> c['d'] += 1 >>> c Counter({'a': 23, 'd': 9, 'b': -9} 

Tenga en cuenta que c['b'] = 0 no se elimina:

 >>> c['b'] = 0 >>> c Counter({'a': 23, 'd': 9, 'b': 0}) 

Para eliminar use del :

 >>> del c['b'] >>> c Counter({'a': 23, 'd': 9}) 

Contador es una subclase dict

Hay una forma más pythonica de hacer lo que quieres:

 c = Counter(item.property for item in something if item.has_some_property) 

Utiliza una expresión generadora en lugar de codificar de forma abierta el bucle.

Editar: Perdió su párrafo sin lista de comprensión. Sigo pensando que esta es la forma de usar realmente Counter en la práctica. Si tiene demasiado código para poner en una expresión generadora o en una lista de comprensión, a menudo es mejor tenerlo en cuenta en una función y llamar a eso desde una comprensión.