Skip to main content

How to Add Items to Dictionaries in Loops

This guide covers how to efficiently add items to a dictionary within a loop in Python. We'll look at basic key-value insertion, handling potential duplicate keys, and building dictionaries where each key maps to a list of values. We'll use for loops, conditional logic, and the powerful collections.defaultdict for cleaner code.

Basic Key-Value Insertion in a Loop​

The fundamental way to add items to a dictionary inside a loop is:

my_list = [
('first', 'tom'),
('last', 'nolan'),
('site', 'tutorialreference.com.com')
]

my_dict = {}

for key, value in my_list: # Tuple unpacking for clarity
my_dict[key] = value

print(my_dict)
# Output: {'first': 'tom', 'last': 'nolan', 'site': 'tutorialreference.com.com'}
  • We initialize an empty dictionary, my_dict.
  • The for loop iterates through my_list which contains key-value pairs in tuples.
  • The tuple values for key and value are unpacked in the for loop.
  • Inside the loop, my_dict[key] = value adds the key-value pair to the dictionary. If key already exists, its value is overwritten.

Preventing Key Overwrites (Handling Duplicates)​

If your data might contain duplicate keys, and you want to keep only the first occurrence, use the in operator to check before inserting:

my_list = [
('site', 'tutorialreference.com.com'),
('last', 'nolan'),
('site', 'google.com') # Duplicate key 'site'
]

my_dict = {}

for key, value in my_list:
if key not in my_dict:
my_dict[key] = value

print(my_dict) # Output: {'site': 'tutorialreference.com.com', 'last': 'nolan'}
  • Only values with keys that are not in the dictionary will be added.

Creating Dictionaries with List Values​

A very common pattern is to build a dictionary where each key maps to a list of values.

You can use setdefault(), but it's less readable than the next option:

my_list = [['site', 'tutorialreference.com.com'], ['last', 'nolan'],
['last', 'test'], ['site', 'google.com']]

my_dict = {}

for key, value in my_list:
my_dict.setdefault(key, []).append(value)
# or my_dict.setdefault(key, []).extend([value])
print(my_dict)
# Output: {'site': ['tutorialreference.com.com', 'google.com'], 'last': ['nolan', 'test']}
  • my_dict.setdefault(key, []) does two things:
    • If key is already in my_dict, it returns the existing value (which should be a list).
    • If key is not in my_dict, it inserts key with a default value of [] (an empty list) and then returns that empty list.
  • The append will work correctly in either case because you will always get a list as a result.

The collections.defaultdict class is specifically designed for this scenario, and is much cleaner:

from collections import defaultdict

my_list = [['site', 'tutorialreference.com.com'], ['last', 'nolan'],
['last', 'test'], ['site', 'google.com']]

my_dict = defaultdict(list) # Specify that the default value is a list

for key, value in my_list:
my_dict[key].append(value) # No need to check if key exists!

print(my_dict)
# Output: defaultdict(<class 'list'>, {'site': ['tutorialreference.com.com', 'google.com'], 'last': ['nolan', 'test']})
  • defaultdict(list) creates a dictionary-like object where, if you try to access a key that doesn't exist, it automatically creates that key and sets its value to an empty list (list() is the "default factory").
  • This eliminates the need for the if key not in my_dict: check, making the code simpler and more efficient.
  • You can set multiple empty lists using a for loop.
a_dict = {}
keys = ['site_a', 'site_b', 'site_c']
for key in keys:
a_dict.setdefault(key, []) # Set empty list as default value.
print(a_dict) # Output: {'site_a': [], 'site_b': [], 'site_c': []}

Updating Multiple Keys with dict.update()​

The dict.update() method updates the dictionary with the key-value pairs from the provided value.

my_dict = {'name': 'alice'}
my_dict.update({'name': 'tom nolan', 'age': 30})
print(my_dict) # Output: {'name': 'tom nolan', 'age': 30}
  • This method is used when you want to update multiple key-value pairs at once.
  • The argument can be a dictionary, or an iterable of key-value pairs (such as tuples).