So I'm having trouble with a homework question.
Write a function word_counter(input_str) which takes a string input_str and returns a dictionary mapping words in input_str to their occurrence counts.
So the code I have so far is:
def word_counter(input_str):
'''function that counts occurrences of words in a string'''
sentence = input_str.lower().split()
counts = {}
for w in sentence:
counts[w] = counts.get(w, 0) + 1
items = counts.items()
sorted_items = sorted(items)
return sorted_items
Now when I run the code with a test case such as word_counter("This is a sentence")
in the Python shell I get the result of:
[('a', 1), ('is', 1), ('sentence', 1), ('this', 2)]
Which is what is required. However, the test code that is used to check the answer is:
word_count_dict = word_counter("This is a sentence")
items = word_count_dict.items()
sorted_items = sorted(items)
print(sorted_items)
And when I run it with that code I get the error:
Traceback (most recent call last):
File "<string>", line 2, in <fragment>
builtins.AttributeError: 'list' object has no attribute 'items'
Not sure how to change my code so that it works with the test code given.
It looks like you found the error in the original code, so you may be all taken care of.
That said, you can tighten-up the code by using collections.Counter(). The example for it in the docs closely matches your assignment:
Figured out what I was doing wrong. Just remove the last 2 lines of code and return the counts dictionary. The test code does the rest :)