Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Count frequency of words in a list and sort by frequency

I am using Python 3.3

I need to create two lists, one for the unique words and the other for the frequencies of the word.

I have to sort the unique word list based on the frequencies list so that the word with the highest frequency is first in the list.

I have the design in text but am uncertain how to implement it in Python.

The methods I have found so far use either Counter or dictionaries which we have not learned. I have already created the list from the file containing all the words but do not know how to find the frequency of each word in the list. I know I will need a loop to do this but cannot figure it out.

Here's the basic design:

 original list = ["the", "car",....]  newlst = []  frequency = []  for word in the original list        if word not in newlst:            newlst.append(word)            set frequency = 1        else            increase the frequency  sort newlst based on frequency list  
like image 649
user3088605 Avatar asked Dec 11 '13 04:12

user3088605


2 Answers

use this

from collections import Counter list1=['apple','egg','apple','banana','egg','apple'] counts = Counter(list1) print(counts) # Counter({'apple': 3, 'egg': 2, 'banana': 1}) 
like image 125
Ashif Abdulrahman Avatar answered Sep 18 '22 03:09

Ashif Abdulrahman


You can use

from collections import Counter 

It supports Python 2.7,read more information here

1.

>>>c = Counter('abracadabra') >>>c.most_common(3) [('a', 5), ('r', 2), ('b', 2)] 

use dict

>>>d={1:'one', 2:'one', 3:'two'} >>>c = Counter(d.values()) [('one', 2), ('two', 1)] 

But, You have to read the file first, and converted to dict.

2. it's the python docs example,use re and Counter

# Find the ten most common words in Hamlet >>> import re >>> words = re.findall(r'\w+', open('hamlet.txt').read().lower()) >>> Counter(words).most_common(10) [('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631),  ('you', 554),  ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)] 
like image 25
tdolydong Avatar answered Sep 22 '22 03:09

tdolydong