Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Python Python Collections (2016, retired 2019) Dictionaries Word Count

Word count problem.

Alright, this one might be a bit challenging but you've been doing great so far, so I'm sure you can manage it.

I need you to make a function named word_count. It should accept a single argument which will be a string. The function needs to return a dictionary. The keys in the dictionary will be each of the words in the string, lowercased. The values will be how many times that particular word appears in the string.

Hello. I've tested this code even in a local environment, and it works perfectly there, but for some reason it's still not being accepted. Please help!!!

wordcount.py
# E.g. word_count("I do not like it Sam I Am") gets back a dictionary like:
# {'i': 2, 'do': 1, 'it': 1, 'sam': 1, 'like': 1, 'not': 1, 'am': 1}
# Lowercase the string to make it easier.

def word_count(string):
    retdict = {}
    alread = []
    string_list = string.lower().split()
    for word in string_list:
        count = 1
        if word in alread:
            count += 1
            retdict[word] = count
        else:
            retdict[word] = count
            alread.append(word)

    return(retdict)
Chris Freeman
Chris Freeman
Treehouse Moderator 68,423 Points

ted, thanks for helping on the forum. Please do post complete answers. The goal is to get explain what the issue is with the original post. Seeing more advanced coded answers helps eventually but for now understanding what isn't working from their current perspective is the most productive. Thanks for understanding.

3 Answers

Chris Freeman
MOD
Chris Freeman
Treehouse Moderator 68,423 Points

Hey Jacob, you are very close. Sometimes when testing locally you have different test data that doesn't show the error.

In your code, count can never be more than 2 since its base value is reset to one on each loop.

One fix would be to not use count. Instead, if the word is in alread, then add 1 to the current value:

            retdict[word] = retdict[word] + 1
            # or use syntactic sugar shortcut:
            retdict[word] += 1

If the word is not in alread, then simply set the value to 1 directly

Finally, return is not a function, so the parens aren't needed. The interpreter is forgiving enough to treat those parens as simple grouping with no effect. Instead use:

    return retdict

Post back if you need more help. Good luck!!

Thanks very much, Chris.

Jeffrey James
Jeffrey James
2,636 Points

In the wild this is more 'pythonic'

>>> from collections import Counter
>>> Counter("I do not like it Sam I Am".split())
Counter({'I': 2, 'do': 1, 'not': 1, 'like': 1, 'it': 1, 'Sam': 1, 'Am': 1})