Last modified: Oct 30, 2024 By Alexander Williams

Using Four Lists to Create a Dictionary in Python

Creating a dictionary from multiple lists in Python can streamline data management, particularly when lists represent related data sets. Let’s explore how to do this efficiently.

Basic Dictionary Creation from Lists

In Python, dictionaries map keys to values. To create a dictionary from four lists, we can use one list as keys and the other three as grouped values.

For example, let’s say we have four lists representing student names, ages, grades, and classes. We want each student’s information grouped in a dictionary:


names = ["Alice", "Bob", "Cathy"]
ages = [21, 22, 23]
grades = ["A", "B", "A"]
classes = ["Math", "Science", "History"]

students_dict = {name: {"age": age, "grade": grade, "class": cls} 
                 for name, age, grade, cls in zip(names, ages, grades, classes)}
print(students_dict)


{'Alice': {'age': 21, 'grade': 'A', 'class': 'Math'},
 'Bob': {'age': 22, 'grade': 'B', 'class': 'Science'},
 'Cathy': {'age': 23, 'grade': 'A', 'class': 'History'}}

This structure lets us access each student’s information quickly.

Using zip() to Combine Lists

zip() is essential here as it allows us to iterate through all lists in parallel. Each element is combined in tuples, which we use to build our dictionary.

In the above example, zip(names, ages, grades, classes) produces pairs from each list position, which we can then unpack.

Using Dictionary Comprehension

Dictionary comprehension offers a concise way to populate the dictionary by directly iterating over each zip() tuple.

This approach allows for custom keys, so you could replace name as the key with other list data, if necessary.

Alternative Methods for Grouping Lists into a Dictionary

Another way to create a dictionary is by looping through lists individually. This can be useful if the lists differ in length:


students = {}
for i in range(len(names)):
    students[names[i]] = {"age": ages[i], "grade": grades[i], "class": classes[i]}
print(students)


{'Alice': {'age': 21, 'grade': 'A', 'class': 'Math'},
 'Bob': {'age': 22, 'grade': 'B', 'class': 'Science'},
 'Cathy': {'age': 23, 'grade': 'A', 'class': 'History'}}

This is a more flexible approach but requires ensuring the lists are of equal length to avoid errors.

For more on looping and dictionary creation, refer to Looping Through Lists to Create a Dictionary in Python.

Handling Uneven List Lengths

If the lists have different lengths, itertools.zip_longest() can handle gaps by filling in with None:


from itertools import zip_longest

names = ["Alice", "Bob"]
ages = [21]
grades = ["A", "B"]
classes = ["Math"]

students_dict = {name: {"age": age, "grade": grade, "class": cls}
                 for name, age, grade, cls in zip_longest(names, ages, grades, classes)}
print(students_dict)


{'Alice': {'age': 21, 'grade': 'A', 'class': 'Math'},
 'Bob': {'age': None, 'grade': 'B', 'class': None}}

With zip_longest(), missing values are assigned None by default, making it a good choice for handling uneven lists.

Conclusion

Combining lists into a dictionary allows for efficient data management. Depending on your requirements, you may use zip(), dictionary comprehension, or zip_longest() for flexibility.

For more list and dictionary handling techniques, check out the official Python documentation on zip().