Grouping and structured records
Part 4 introduced dictionary construction, lookup by key, traversal with items(), and lists of record dictionaries. This section applies those structures to grouping observations and maintaining small collections of records.
Grouping and counting
Let's have a look at a list of words:
word_list = [
"banana", "milk", "beer", "cheese", "sourmilk", "juice", "sausage",
"tomato", "cucumber", "butter", "margarine", "cheese", "sausage",
"beer", "sourmilk", "sourmilk", "butter", "beer", "chocolate"
]We would like to analyze this list of words in different ways. For instance, we would like to know how many times each word appears in the list.
A dictionary can be a useful tool in managing this kind of information. In the example below, we go through the items in the list one by one. Using the words in the list as keys in a new dictionary, the value mapped to each key is the number of times the word has appeared:
def counts(my_list):
words = {}
for word in my_list:
# if the word is not yet in the dictionary, initialize the value to zero
if word not in words:
words[word] = 0
# increment the value
words[word] += 1
return words
# call the function
print(counts(word_list))The program prints out the following:
{'banana': 1, 'milk': 1, 'beer': 3, 'cheese': 2, 'sourmilk': 3, 'juice': 1, 'sausage': 2, 'tomato': 1, 'cucumber': 1, 'butter': 2, 'margarine': 1, 'chocolate': 1}
What if we wanted to categorize the words based on the initial letter in each word? One way to accomplish this would be to use dictionaries:
def categorize_by_initial(my_list):
groups = {}
for word in my_list:
initial = word[0]
# initialize a new list when the letter is first encountered
if initial not in groups:
groups[initial] = []
# add the word to the appropriate list
groups[initial].append(word)
return groups
groups = categorize_by_initial(word_list)
for key, value in groups.items():
print(f"words beginning with {key}:")
for word in value:
print(word)The structure of the function is very similar to the previous exercise but this time the values mapped to the keys are lists. The program prints out the following:
words beginning with b: banana beer butter beer butter beer words beginning with m: milk margarine words beginning with c: cheese cucumber cheese chocolate words beginning with s: sourmilk sausage sausage sourmilk sourmilk words beginning with j: juice words beginning with t: tomato
Structured records in practice
A list of dictionaries is useful when each record has the same named fields. The following exercises apply the record shape introduced in Part 4: first by adding complete records to a collection, and then by filtering that collection. Focus on preserving the agreed field names and returning records in their original shape.
You can check your current points from the blue blob in the bottom-right corner of the page.