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 trialJacob Fong
3,754 PointsWord 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!!!
# 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)
3 Answers
Chris Freeman
Treehouse Moderator 68,441 PointsHey 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!!
Jacob Fong
3,754 PointsThanks very much, Chris.
Jeffrey James
2,636 PointsIn 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})
Chris Freeman
Treehouse Moderator 68,441 PointsChris Freeman
Treehouse Moderator 68,441 Pointsted, 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.