How to add or increment single item of the Python Counter class How to add or increment single item of the Python Counter class python python

How to add or increment single item of the Python Counter class


Well, you don't really need to use methods of Counter in order to count, do you? There's a += operator for that, which also works in conjunction with 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)

You can add a new element and set its value like this:

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

Increment:

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

Note though that c['b'] = 0 does not delete:

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

To delete use del:

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

Counter is a dict subclass


There is a more Pythonic way to do what you want:

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

It uses a generator expression instead of open-coding the loop.

Edit: Missed your no-list-comprehensions paragraph. I still think this is the way to actually use Counter in practice. If you have too much code to put into a generator expression or list comprehension, it is often better to factor that into a function and call that from a comprehension.