Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Update Counter collection in python with string, not letter

How to update a Counter with a string, not the letters of the string? For example, after initializing this counter with two strings:

from collections import Counter
c = Counter(['black','blue'])

"add" to it another string such as 'red'. When I use the update() method it adds the letters 'r','e','d':

c.update('red')
c
>>Counter({'black': 1, 'blue': 1, 'd': 1, 'e': 1, 'r': 1})
like image 892
aless80 Avatar asked Jul 27 '17 03:07

aless80


4 Answers

You can update it with a dictionary, since add another string is same as update the key with count +1:

from collections import Counter
c = Counter(['black','blue'])

c.update({"red": 1})  

c
# Counter({'black': 1, 'blue': 1, 'red': 1})

If the key already exists, the count will increase by one:

c.update({"red": 1})

c
# Counter({'black': 1, 'blue': 1, 'red': 2})
like image 74
Psidom Avatar answered Nov 15 '22 10:11

Psidom


c.update(['red'])
>>> c
Counter({'black': 1, 'blue': 1, 'red': 1})

Source can be an iterable, a dictionary, or another Counter instance.

Although a string is an iterable, the result is not what you expected. First convert it to a list, tuple, etc.

like image 33
Alexander Avatar answered Nov 15 '22 10:11

Alexander


You can use:

c["red"]+=1
# or
c.update({"red": 1})
# or 
c.update(["red"])

All these options will work regardless of the key being present or not. And if present, they will increase the count by 1

like image 30
anon Avatar answered Nov 15 '22 12:11

anon


I though it would be also good to give another example which you can both increase and decrease the number of counts

from collections import Counter

counter = Counter(["red", "yellow", "orange", "red", "orange"])
# to increase the count
counter.update({"yellow": 1})
# or
counter["yellow"] += 1

# to decrease
counter.update({"yellow": -1})
# or
counter["yellow"] -= 1
like image 31
abdullahselek Avatar answered Nov 15 '22 10:11

abdullahselek