"Josep M. Fontana" <josep.m.font...@gmail.com> wrote

The code I started writing to achieve this result can be seen below.
You will see that first I'm trying to create a dictionary that
contains the word as the key with the frequency as its value. Later on
I will transform the dictionary into a text file with the desired
formatting.

Thats the right approach...

things around and I cannot get it to work as desired. Can anybody tell
me what's wrong so that I can say "duh" to myself once again?

I'll give some comments

---------------------------
def countWords(a_list):
   words = {}
   for i in range(len(a_list)):
       item = a_list[i]
       count = a_list.count(item)
       words[item] = count
return sorted(words.items(), key=lambda item: item[1], reverse=True)

The loop is a bit clunky. it would be clearer just to iterate over a_list:

for item in a_list:
    words[item] = a_list.count(item)

And the return value is a list of tuples, which when you write
it will be a single long line containing the string representation.
Is tat what you want?


with open('output.txt', 'a') as token_freqs:
   with open('input.txt', 'r') as out_tokens:
       token_list = countWords(out_tokens.read())
       token_freqs.write(token_list)

read returns a single string. Using a for loop on a string will get
you the characters in the string not the words.
Also you probably want to use 'w' mode for your output
file to create a new one each time, otherwise the file will
keep getting bigger everytime you run the code.

HTH,


--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/


_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to