Technical Article

Python Tutorial Part 4 | Data Structures: Dictionaries

June 06, 2024 by Michael Levanduski

Both lists and dictionaries can retain structured data in Python. The dictionary is unique in that it stores individual entries with human-readable logical names rather than index numbers.

Following the previous discussion about data storage in the list format, the next most common type of data structure in Python is the dictionary. These new data types provide slightly more structure to contained objects than lists and closely resemble JSON strings.

 

What is a Dictionary?

The dictionary data structure is similar to a list in several main characteristics. Both are mutable, and they both retain the order of objects within them, a factor that was critical to the “Jet Fuel Mercaptan Oxidation Treating” process example in the last section.

However, dictionaries differ from lists in that they use a key instead of a numeric index to mark the offset of objects within them. We will continue with the same example we used previously as we now highlight how the process may be viewed through the lens of a dictionary.

 

Chemical process diagram

Figure 1. A chemical process diagram used to relate concepts of a Python dictionary. Image used courtesy of ConceptDraw

 

Using the handy chemical process flow in Figure 1 again, each of the equipment objects in the process should be viewed as a collective whole. A dictionary allows us to group objects together just as the list does.

Defining the dictionary involves declaring a variable assigned to curly brackets { }. Let's define the process above using a dictionary and then dive into the specifics:

 

Dictionaries are composed of key value pairs very similar to a JSON structure. The keys are restricted to immutable data types such as strings, integers, booleans, and floats. Values may take the shape of both immutable and mutable types such as another list or dictionary nested inside the dictionary. In the jet_fuel_mercaptan_oxidation_treatment the keys are denoted by ‘equipment_’ and the values are strings denoting the name of the equipment.

A good way to keep dictionaries aesthetically clean and easy to read is to define the first curly bracket and then create a tabbed new line containing the key value pair. The comma is required to separate each key value pair in the dictionary with the last pair in the dictionary not requiring a comma. Each subsequent key value pair should have its own new line.

 

Working with Dictionaries

Accessing an Entry

Dictionaries, like lists, preserve the order of objects. Order of equipment in the jet fuel mercaptan oxidation process is important to obtain the desired sweetened jet fuel product. However, instead of specifying a numeric offset, dictionary objects are accessed by indicating the key name:

 

Accessing a data value in a dictionary

Figure 2. Accessing an indicated data value by recalling a key name. Image used courtesy of the author

 

Duplicate Keys

What would happen if we had 2 keys of the same name? Wouldn’t pulling the associated value cause a conflict? Let’s try it out for a duplicate “equipment_1” key:

 

Duplicate key name example

Figure 3. An example of an error-prone duplicate key name. Image used courtesy of the author

 

The return will be the second key overwriting the first key, as shown above. However, dictionaries should not contain duplicate keys; notice how the Pycharm editor has issued yellow squiggly lines underneath 'equipment_1?' It is a warning that duplicate keys are a bad idea:

 

Duplicate key name error message

Figure 4. Error resulting from a duplicate key name. Image used courtesy of the author

 

Updating a Value

Let’s say that our engineer once again wants to update the “Salt Bed” equipment name to “Sodium Chloride Bed”:

 

Editing a variable key name

Figure 5. Editing the name of a variable in a data set. Image used courtesy of the author

 

We update the value by accessing the existing key name ('equipment_1') and reassigning it with the value of “Sodium Chloride Bed”.

 

Adding a Key Value Pair

The engineer managing this process wants to add a second stage of water wash equipment to the process. This can be accomplished with the same syntax used to update an existing key’s value:

 

Adding a key name entry to a dictionary in Python

Figure 6. Adding a new entry to the data set. Image used courtesy of the author

 

Deleting a Key Value Pair

After adding the second stage clay bed, the engineer realizes the new equipment added is much more efficient than the original clay bed assigned to the ‘equipment_6’ key. Deleting the original ‘equipment_6’ key from the process can be accomplished with the del keyword:

 

Deleting a value from a Python dictionary

Figure 7. Deleting an entry from the value set. Image used courtesy of the author

 

Nested Dictionaries

From an engineering perspective, a benefit of using the dictionary structure is the ability to assign additional metadata to objects. In the jet_fuel_mercaptan_oxidation_treatment chemical process, the equipment objects have many more associated attributes than just a textual name. For example, temperature and pressure are often the key parameters to a successful chemical reaction. An engineer managing this process could log and display the temperature and pressure parameters of the Merox reactor by using a nested dictionary:

 

The actual values would likely be an integrated real time data feed, but for the scope of this article we will harcode integer values.

Accessing nested dictionary keys requires slightly different syntax. Let’s access the pressure value of the reactor:

 

Nesting an entry in a Python dictionary

Figure 8. Accessing a value nested within a parent data entry. Image used courtesy of the author

 

Dictionary Methods

The dictionary, like the list, is a built-in data structure to the Python language. The dictionary data structure has predefined methods that can be called to perform actions on instances of dictionary objects. This section will not cover all dictionary methods, but will provide the two most common I’ve experienced in courses and world use.

 

List of Python dictionary methods

Figure 9. Visual of built-in dictionary methods available in Python. Image used courtesy of Ipcisco

 

.keys()

This method will return all of the keys associated with a dictionary assigned to the variable in the form of a list.

 

The output:

 

.values()

This method returns all of the values associated with a dictionary assigned to the variable in the form of a list.

 

The output:

 

Wrapping Up

In the next (forthcoming) section of our Python tutorial series, we’ll continue the data structures chapter of the Python learning journey with tuples.

 

Did you miss the earlier articles?

Part 1 | What is Python and Where do I Start?

Part 2 | Basic Data Types

Part 3 | Data Structures: Lists