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

<noob />
17,063 PointsTrying to understand the solution for this challange
Hi!, so i have a few questions regarding the solution, i was unable to solve it by my self so i looked over a few solutions and i understood the idea of the solution but is till have questions: this is the code:
def word_count(string):
fixed_string = string.lower().split()
d = {}
for key in fixed_string:
count = 0
for value in fixed_string:
if value == key:
count +=1
print(value,key)
d[key] = count
return d
print(word_count("I do not like it Sam I Am"))
questions: I tried to see what actually the value in each time so i printed this is the results: https://gyazo.com/576445af798faf35ff7b978f025f216f I understand that in the first for loop we just loop over the list and the second for loop is meant to loop again on the list to see if the values are equal and if the value in the first for loop is equal to the value in the second for loop we increase count. but i dont really know how is it working. 1.#why i need to declare the count here and not outside of the for loop?, i tried to declare it outside of the loop and the counting messed up.
Asian Hospital Application Developer Dave StSomeWhere Steven Parker
8 Answers

Steven Parker
241,811 PointsThe reason to set the count to 0 inside the loop is because you want a separate count for each key. If you kept adding to to count for every key, then they would all be too large.

<noob />
17,063 Pointshow the coutn is not rested lets say when when we get to the last "I" in the sentence if the count of each key is rested to 0 evrey iteration? im sorry i know its a stupid question

Steven Parker
241,811 PointsThe count does reset to 0 for every key with the code as shown above. But if you move the assignment outside the loop, it is only set to 0 one time before the loop starts, and then it would keep building up from then on.

<noob />
17,063 Pointslol i got confused again. each time the count does reset for each key, i didnt moved the count outside of the loop and it passed teh code challnages

Steven Parker
241,811 PointsThat's right, the code shown above should pass the challenge as it is. Your original question #1 was why it would not work if you moved the initialization of "count" out of the loop (I didn't see a #2).

<noob />
17,063 Pointsyou didnt understand my question, as the code now, each time count is set to 0 , what i want to know is how in the sentence: print(word_count("I do not like it Sam I Am")) this is basically : [I,DO, NOT, LIKE, IT, SAM, I , AM]
lets take the I key for example, it appear 2 times in the string, so if we do the iteration for the first I , then the output is now i =1, when we get to the seonc I, the I count is rest to 0 is it not?, that's what hard for me to understand how it builts up to 2 if its considered as a new key

Steven Parker
241,811 PointsThere are two "I"s in the phrase. So each time the key is "I", the count is first set to 0 in the outer loop, and then the inner loop runs and builds it up to 2.
It doesn't matter how many times any "key" appears. Every time, the inner loop will give the same count.

<noob />
17,063 Pointsthe counts inside the inner loop and in the outer loop are 2 different counts?

Steven Parker
241,811 PointsSame "count". The outer loop sets it to 0 and the inner loop builds it up. Then the outer loop saves it in the new "d" dictionary before moving on to the next "key".

<noob />
17,063 PointsThanks i finally understand it!

Andrew Bickham
1,461 PointsI was wondering if i could possibly ask a question concerning this code?

<noob />
17,063 PointsAndrew Bickham yes

Andrew Bickham
1,461 Pointsthe only thing I didn't quite understand about this code was why the key and value had to be the same ex: if key == value:

<noob />
17,063 PointsAndrew Bickham u check if the key is equal to the value because the outer loop is selecting each word and the innerloop is counting how many times it occurs

Andrew Bickham
1,461 Pointsoooooooooooohhh, okay thank you bot .net
<noob />
17,063 Points<noob />
17,063 PointsSteven Parker just to be sure i understood this, lets say we in the first iteration of fixed_string i have key which is "steven" then for this key i set his count to 0?
and why we nested the for loops?
Steven Parker
241,811 PointsSteven Parker
241,811 PointsYes, you first set the count to 0, but then the inner loop will total up the count of how many times that key is found. Then, when the outer loop moves on to the next key, it starts a new count from 0.
Nested loops is not the only strategy you can use for this task, but here the outer one is selecting each word and the inner one is counting how many times it occurs.