9 Chapter 9: Lists and Dictionaries
LISTS AND DICTIONARIES
Topics Covered:
- List basics
- Slicing a list
- Deleting from a list
- Adding to a list
- Processing a list
- List operators
List basics
A list is an ordered sequence of objects. You can use a list to store multiple items using a single variable. The Python list has many similarities to an array, which is provided by most programming languages. The main difference is that every item in an array must have the same data type while a list may contain objects of different types. If you know the values that you want to store in a list, you can create a list by enclosing the set of values, separated by commas, between square brackets, like this:
The variable school now stores five data items associated with a university. Similar to a string, you can access individual elements of the list by using an index, or subscript. In the example below, we access the first element (using index 0) and the fourth element (using index 3). When attempting to access the element using index 5, Python indicates an error has occurred since the index is out of range:
Python provides several statistical functions that come in handy when processing data in a list. In the code below, we create two more lists and then try out the len(), max(), min(), and sum() functions. These functions are pretty straightforward. As discussed in chapter three, the max and min of strings use ASCII codes. The program ran into trouble when it tried to find the sum() of a list of strings. The sum() function only works on numeric lists.
Slicing a List
In the same way you can use square brackets [] and the colon (:) operator to extract slices of strings, you can retrieve slices of lists. The example below shows several slice examples. Examine each one closely to verify your understanding of how slices work.
To further illustrate the concept of object-oriented programming, we will take a look at a couple of functions, or methods, that are associated with the list data type. As we saw when using methods for string variables, to use a method, you reference the list variable, followed by a dot, followed by the method name. Using the same nums list from previous examples, first we examine the count() method. You provide a value to the count() method as an argument, and it will return the number of occurrences of that value. The second example is the index() method. Again, you pass a value as an argument, but the index() method will return the position of that value in the list. If the value occurs multiple times, it returns the position of the first occurrence. If the value does not exist in the list, you can see from the example that it will cause the program to crash.
Deleting from a List
There are two ways to remove an item from a list. You can use the del instruction if you want to delete an item based on its subscript. In the next example, we first delete the fourth (using subscript 3) item from the fruit list. After that, we get an error message since we tried to delete the tenth item (using subscript 9), but there were only four items in the list.
Instead of using the subscript, you can also remove an item based on a value. In this case, you use the remove() method and pass the value to remove as the argument. If the item exists more than once in the list, only the first occurrence will be deleted. If the item does not exist in the list, an error will occur, as shown in the example that follows:
Adding to a List
There are multiple ways to add items to a list. The append() method is a simple technique that just adds the required argument to the end of a list. In our next example, we use append to add the value 33 to the end of a five-item list named things.
The insert() method has two arguments, the position in the list to place the new item and the value to be inserted. In the second example, we inserted the value “tiger” at position 2, which is actually the third item in the list. When the new list is displayed, “tiger” squeezes into position 2 and all of the items after it are pushed back one slot.
A third way to add items to a list is to use the extend() method. This function is similar to the append() method except the argument to be passed is another list instead of a single data item. In the example, we created a four-item list named birds and then passed that list to the extend() method. The new contents of things include the seven items it previously stored plus the four items of the birds list.
List Processing
The code below illustrates three more useful Python list methods. The first one, sort, arranges the list items in ascending order. The sort() method can also be applied on a list of strings. The reverse() method does exactly what you might guess. It just flips the order of the list. Finally, the clear() method will delete all of the items from a list. You can see from the example below that a list is empty when it displays as just two brackets [].
List Operators
Similar to the concatenation of strings, the plus (+) operator can be used to combine two lists. In the first example below, you can observe the instruction first + second is used to combine those two lists.
In the final example, we use the multiplication (*) operator to perform repetition. Once again, this mimics the repetition functionality this operator applies with strings. Although the order does not matter, the operation requires a list and an integer. As you can see from the examples below, the list [1,2,3] is repeated five times. It is often convenient to use this repetition operator to initialize a list. For example, the final instruction initializes a 100-item list named pay to 100 values of zero.
To conclude the chapter, we will build a full application to solve a problem:
Problem: The annual Lion Bass Fishing Tournament has hired you to write an application to help process the tournament statistics. Specifically, each team will use your application to input the weight of each fish they catch. After entering a fish weight, the program will ask the user if there are any more fish weights to enter. When the tournament concludes, the program will display summary statistics for that team. This will include a table with the weights of all fish caught, as well as the fish count, the total weight, the heaviest fish, the lightest fish, and the average weight.
On the next page, we will first model a solution to this problem with a flowchart. This is the coolest and most complex flowchart we have seen so far. Of course, it begins with the “Start” symbol and then initializes variables more and weights. You should be able to follow along with each symbol of the flowchart and then see how the flowchart naturally translates into the working Python program.
In the program, you will notice how we took advantage of many of the list functions and methods discussed in the chapter. To add each fish to the weights list, we used the append method. To find the fish count, total weight, heaviest fish, and lightest fish, we used the len, sum, max, and min functions, respectively. Below, we will show the output of a sample run of the program. Notice how we used upper string method to convert all responses to more to uppercase to make our program more user friendly, so the keyboard user doesn’t need to worry about the ‘Y’ or ‘N’ input being upper or lower case.
Dictionaries
Similar to a list, a dictionary is another Python data type that is used to store a collection of data. A a data structure that is also known as an associative array, the dictionary consists of a collection of key-value pairs. Each key-value pair maps the key to its associated value.
In the example below, a dictionary named school is created with four key-value pairs. To initialize a dictionary, you use curly brackets to enclose the data and a colon to separate each key-value pair. The example shows how to access the value of an item, as well as illustrates how to use dictionary functions and methods.
The output when the above program is executed is seen here:
Often times, we like to use the key as a way to access data directly. In the example below, we will create a dictionary named states that stores the population of U.S. states from the year 2000 through 2019. This data was found at a web site called Kaggle, that has thousand of freely accessible data sets that you can use for programming projects. A small chunk of this comma-separated data file is shown here:
In our example, we use the state name (data[0]) as the dictionary key. The dictionary value is actually a 22-component list that consists of the state name, a state code, and then the populations for that state between 2000 and 2019. In our program, we just print the state name and the state’s 2019 population. Once this loop completes, we illustrate how you can obtain all of the data for a given state, taking the user input and using it as the dictionary key.
A portion of the program output is shown below. In this example, the user entered Ohio as input and the program displayed the data for that state.
INTERACTIVE – Python collection types
Four common data types to store collections of data in Python are illustrated in the program below. Observe the code and then run the program. Do a quick Internet search to see if you can identify the properties that differentiate these four collections.
Chapter Review Exercises:
9.1. What is the output of the following Python code?
myList = [8, 3, 14, 5, 10]
print (len(myList))
9.2. What is the output of the following Python code?
myList = [8, 3, 14, 5, 10]
print (sum(myList))
9.3. What is the output of the following Python code?
myList = [8, 3, 14, 5, 10]
myList.clear()
print (len(myList))