Count element frequencies

How to count the frequencies of elements in a list?

• Convert to a dictionary with key is the element, value is the frequency
• Sort the dictionary

Solution 1

First construct a list with repetitive elements:

data_freq = [randint(0,10) for _ in range(30)]
{% asset_img 'data_freq.PNG' %}
res = {}

for ele in data_freq:
if ele in res:
res[ele] += 1
else:
res[ele] = 1

res = dict(sorted(res.items(), key=lambda x: x[1], reverse=True))

Solution 2

Construct a dictionary based on the data, initial values are 0

res2 = dict.fromkeys(data_freq, 0)
{% asset_img 'fromkey.PNG' %}

Construct the count dictionary

for d in data_freq:
res2[d] += 1

res = dict(sorted(res.items(), key=lambda x:x[1], reverse=True))

To select the top 3, can use heapq

import heapq

heapq.nlargetst(3, ((v,k) for k,v in d.items())

Counter

It’s very easy to do this with Counter from collections.

from collections import Counter

Counter(data_freq)

Use most_common method

c = Counter(data_freq)
c.most_common()

An example of word count

Read a file containing zen of python and perform a word count.

Use RegEx to split words

import re
wl = re.split('\W+', zen)
wc = Counter(wl)
wc.most_common(3)

Reprint policy