Reputation: 12164
Can I add/increment individual elements to a Counter?
I am getting each element one by one from an xml parse stream, so my Counter use here is always going to be based on 1-by-1.
OK, I know I can do this:
from collections import Counter
counter = Counter("abaa")
print ("counter:", counter) #('counter:', Counter({'a': 3, 'b': 1}))
#and I can do this as well...
def track_data(counter, data):
counter.update(Counter(data))
#let's say I am in a function that receives data one by one.
one_element_of_incoming_data = "a"
track_data(counter, one_element_of_incoming_data)
print ("counter:", counter) #('counter:', Counter({'a': 4, 'b': 1}))
but what I really want to do is to increment without building a new counter:
counter.increment(one_element_of_incoming_data)
and see my count for 'a' go up by one. It doesn't look like it's in the Counter API, am I missing something?
Yes, I know that I could use a defaultdict and increment myself, but I was kinda expecting this capability out of a Counter.
Upvotes: 2
Views: 1228
Reputation: 309929
Sure:
from collections import Counter
counter = Counter()
for s in 'abcdefga':
counter[s] += 1
In this way, Counter
works like a defaultdict(int)
. However, it also has some handy methods since it is made to work with counts of things (e.g. you can add two Counter
s together, it has a more convenient constructor, etc.).
Upvotes: 4