pythoncountfrequencycounting

Item frequency count in Python


Assume I have a list of words, and I want to find the number of times each word appears in that list.

An obvious way to do this is:

words = "apple banana apple strawberry banana lemon"
uniques = set(words.split())
freqs = [(item, words.split().count(item)) for item in uniques]
print(freqs)

But I find this code not very good, because the program runs through the word list twice, once to build the set, and a second time to count the number of appearances.

Of course, I could write a function to run through the list and do the counting, but that wouldn't be so Pythonic. So, is there a more efficient and Pythonic way?


Solution

  • The Counter class in the collections module is purpose built to solve this type of problem:

    from collections import Counter
    words = "apple banana apple strawberry banana lemon"
    Counter(words.split())
    # Counter({'apple': 2, 'banana': 2, 'strawberry': 1, 'lemon': 1})