Building Dictionaries
By now you are familiar with two important concepts: 1) counting with for
loops and 2) the dictionary get
method. These two can actually be combined to create a useful counter dictionary, something you will likely come across again. For example, we can create a dictionary, word_counter
, that keeps track of the total count of each word in a string.
The following are a couple of ways to do it:
Method 1: Using a for
loop to create a set of counters
Let’s start with a list containing the words in a series of book titles:
book_title = ['great', 'expectations','the', 'adventures', 'of', 'sherlock','holmes','the','great','gasby','hamlet','adventures','of','huckleberry','fin']
Step 1: Create an empty dictionary.
word_counter = {}
Step 2. Iterate through each element in the list. If an element is already included in the dictionary, add 1 to its value. If not, add the element to the dictionary and set its value to 1.
for word in book_title: if word not in word_counter: word_counter[word] = 1 else: word_counter[word] += 1
What’s happening here?
- The
for
loop iterates through each element in the list. For the first iteration,word
takes the value ‘great’. - Next, the if statement checks if
word
is in theword_counter
dictionary. - Since it doesn’t yet, the statement
word_counter[word] = 1
adds great as a key to the dictionary with a value of 1. - Then, it leaves the if else statement and moves on to the next iteration of the for loop.
word
now takes the value expectations and repeats the process. - When the if condition is not met, it is because that
word
already exists in theword_counter
dictionary, and the statementword_counter[word] = word_counter[word] + 1
increases the count of that word by 1. - Once the
for
loop finishes iterating through the list, thefor
loop is complete.
We can see the output by printing out the dictionary. Printing word_counter
results in the following output.
{'great': 2, 'expectations': 1, 'the': 2, 'adventures': 2, 'of': 2, 'sherlock': 1, 'holmes': 1, 'gasby': 1, 'hamlet': 1, 'huckleberry': 1, 'fin': 1}
Feel free to try this out yourself in the code editor at the bottom of this page.
Method 2: Using the get
method
We will use the same list for this example:
book_title = ['great', 'expectations','the', 'adventures', 'of', 'sherlock','holmes','the','great','gasby','hamlet','adventures','of','huckleberry','fin']
Step 1: Create an empty dictionary.
word_counter = {}
Step 2. Iterate through each element, get()
its value in the dictionary, and add 1.
Recall that the dictionary get
method is another way to retrieve the value of a key in a dictionary. Except unlike indexing, this will return a default value if the key is not found. If unspecified, this default value is set to None. We can use get
with a default value of 0 to simplify the code from the first method above.
for word in book_title: word_counter[word] = word_counter.get(word, 0) + 1
What’s happening here?
- The
for
loop iterates through the list as we saw earlier. Thefor
loop feeds ‘great’ to the next statement in the body of thefor
loop. - In this line:
word_counter[word] = word_counter.get(word,0) + 1
, since the key ‘great’ doesn’t yet exist in the dictionary,get()
will return the value 0 andword_counter[word]
will be set to 1. - Once it encounters a word that already exists in
word_counter
(e.g. the second appearance of ‘the’), the value for that key is incremented by 1. On the second appearance of ‘the’, the key’s value would add 1 again, resulting in 2. - Once the
for
loop finishes iterating through the list, thefor
loop is complete.
Printing word_counter
shows us we get the same result as we did in method 1.
{'great': 2, 'expectations': 1, 'the': 2, 'adventures': 2, 'of': 2, 'sherlock': 1, 'holmes': 1, 'gasby': 1, 'hamlet': 1, 'huckleberry': 1, 'fin': 1}