Last modified: Oct 29, 2024 By Alexander Williams

Loop Through a List in a Dictionary in Python

In Python, dictionaries often contain lists as values. Looping through these lists within dictionaries is a helpful technique.

Understanding Dictionaries with Lists

A dictionary is a collection of key-value pairs. It’s common for each key to point to a list as its value.

For example, a dictionary can store multiple names under different categories:


names = {
    "students": ["Alice", "Bob", "Charlie"],
    "teachers": ["Mr. Smith", "Ms. Johnson"]
}

To access each list, you need to loop through the dictionary and the list values.

Looping Through a Dictionary's Keys

Looping through the dictionary’s keys with for allows you to target each key and its list value. Here’s how:


for group in names:
    print(f"Group: {group}")
    for name in names[group]:
        print(name)


Group: students
Alice
Bob
Charlie
Group: teachers
Mr. Smith
Ms. Johnson

This example uses a nested loop. The outer loop goes through the dictionary, while the inner loop processes each list.

Using items() to Access Keys and Values

The items() method provides access to both keys and values simultaneously, simplifying code.


for group, members in names.items():
    print(f"Group: {group}")
    for member in members:
        print(member)


Group: students
Alice
Bob
Charlie
Group: teachers
Mr. Smith
Ms. Johnson

With items(), you can reference both the group name and its list elements, making the loop more readable.

Looping with Dictionary Comprehensions

Dictionary comprehensions are a concise way to transform data in dictionaries. Here’s an example of converting names to uppercase:


uppercase_names = {group: [name.upper() for name in members] for group, members in names.items()}
print(uppercase_names)


{'students': ['ALICE', 'BOB', 'CHARLIE'], 'teachers': ['MR. SMITH', 'MS. JOHNSON']}

This approach is efficient for applying functions or transformations to each list element.

Using enumerate() to Track Indexes

Use enumerate() when you need to keep track of each list item’s position. This is useful for itemized output:


for group, members in names.items():
    print(f"Group: {group}")
    for index, member in enumerate(members):
        print(f"{index}: {member}")


Group: students
0: Alice
1: Bob
2: Charlie
Group: teachers
0: Mr. Smith
1: Ms. Johnson

This method is helpful if you need the index for further processing or displaying.

Using Nested Lists in Dictionaries

Sometimes, dictionary values are nested lists, and looping through them requires another level of iteration.


courses = {
    "semester_1": [["Math", "A"], ["History", "B"]],
    "semester_2": [["Physics", "A"], ["Chemistry", "B"]]
}

for semester, grades in courses.items():
    print(f"Semester: {semester}")
    for subject, grade in grades:
        print(f"{subject}: {grade}")


Semester: semester_1
Math: A
History: B
Semester: semester_2
Physics: A
Chemistry: B

This example shows how to access elements in each nested list, ideal for processing detailed data.

Conclusion

Looping through lists in a dictionary offers a flexible way to manage complex data in Python.

To learn more about dictionaries, check the official Python documentation.