understanding some code - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: Homework (https://python-forum.io/forum-9.html) +--- Thread: understanding some code (/thread-17209.html) |
understanding some code - souprqtpie - Apr-02-2019 Hello I am currently learning how to code in python, and am doing a set of challenges set by the course I am on. there was a certain challenge I was unable to complete, and was given the solution for. I don't understand how the solution works for the question, and it would be great if someone could break it down for me and explain each step. The challenge is as follows: create a function (count) which takes a string as a parameter and returns a dictionary listing the letters in the string and how often each occurs. for example: count("aa") == {"a": 2} count("abb") == {"a": 1, "b": 2} count("hello") == {"h": 1, "e": 1, "l": 2, "o": 1}The solution they provided: def count(string): out = {} for letter in string: if letter not in out: out[letter] = 0 out[letter] = out[letter] + 1 return outMany thanks for any help, don't be afraid to be overly patronising in explanation, I won't take offence as you can't know for sure, how solid my knowledge is. Soup RE: understanding some code - Larz60+ - Apr-02-2019 def count(string): # Create empty dictionary out out = {} # for each letter in the string for letter in string: #if the letter's not already in the dictionary if letter not in out: # add letter to dictionary and set value to 0 out[letter] = 0 # now increment the letter's value out[letter] = out[letter] + 1 return outstring = 'cache' As an example structure of the dictionary for above string would look like: out = { 'a': 1, 'c': 2, 'e': 1, 'h': 1 } RE: understanding some code - perfringo - Apr-03-2019 (Apr-02-2019, 11:16 AM)souprqtpie Wrote: create a function (count) which takes a string as a parameter and returns a dictionary listing the letters in the string and how often each occurs. Some alternative ways how to count letters in string using dict and it's subclasses(just for learning purposes): >>> word = 'cache' >>> d = {} >>> for letter in word: ... d[letter] = d.get(letter, 0) + 1 ... >>> d {'c': 2, 'a': 1, 'h': 1, 'e': 1}What dictionary method .get does: "Return the value for key if key is in the dictionary, else default". So we return value of the key if it exists or 0 if it does not and add one. It basically does same thing as original code but shorter and more concise. >>> from collections import defaultdict >>> word = 'cache' >>> d = defaultdict(int) >>> for letter in word: ... d[letter] += 1 ... >>> d defaultdict(int, {'c': 2, 'a': 1, 'h': 1, 'e': 1})Python built-in module collections contain two data structures which are suitable for counting - one is defaultdict (dict subclass that calls a factory function to supply missing values) and the other is Counter (dict subclass for counting hashable objects): >>> from collections import Counter >>> word = 'cache' >>> Counter(word) Counter({'c': 2, 'a': 1, 'h': 1, 'e': 1}) |