Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
Combining values from dictionary of list in Python
When working with a Python dictionary that has lists as values, you may need to create all possible combinations of keys and their corresponding values. This is useful for generating test data, configuration combinations, or exploring different scenarios.
Using sorted() and product()
The product() function from itertools creates a Cartesian product of iterables. By sorting the dictionary keys first, we ensure consistent ordering in our combinations ?
import itertools as it
schedule_dict = {
"Day": ["Tue", "Wed"],
"Time": ["2pm", "9am"],
}
# Sorting dictionary keys for consistent ordering
sorted_keys = sorted(schedule_dict)
# Using product to create all combinations
combinations = [dict(zip(sorted_keys, prod))
for prod in it.product(*(schedule_dict[key] for key in sorted_keys))]
print(combinations)
[{'Day': 'Tue', 'Time': '2pm'}, {'Day': 'Tue', 'Time': '9am'}, {'Day': 'Wed', 'Time': '2pm'}, {'Day': 'Wed', 'Time': '9am'}]
Using zip() with product()
This approach uses zip() along with product() to create separate dictionaries for each key-value pair, then groups them by combination ?
import itertools as it
schedule_dict = {
"Day": ["Tue", "Wed"],
"Time": ["2pm", "9am"],
}
# Creating combinations with separate dictionaries
combinations = [[{key: value} for (key, value) in zip(schedule_dict, values)]
for values in it.product(*schedule_dict.values())]
print(combinations)
[[{'Day': 'Tue'}, {'Time': '2pm'}], [{'Day': 'Tue'}, {'Time': '9am'}], [{'Day': 'Wed'}, {'Time': '2pm'}], [{'Day': 'Wed'}, {'Time': '9am'}]]
Using List Comprehension with product()
For a more straightforward approach, you can directly use product() with the dictionary values ?
import itertools as it
schedule_dict = {
"Day": ["Tue", "Wed"],
"Time": ["2pm", "9am"],
}
# Simple approach using product directly
keys = list(schedule_dict.keys())
combinations = [dict(zip(keys, values))
for values in it.product(*schedule_dict.values())]
print(combinations)
[{'Day': 'Tue', 'Time': '2pm'}, {'Day': 'Tue', 'Time': '9am'}, {'Day': 'Wed', 'Time': '2pm'}, {'Day': 'Wed', 'Time': '9am'}]
Comparison
| Method | Output Format | Best For |
|---|---|---|
sorted() + product() |
Single dictionaries | Consistent key ordering |
zip() + product() |
List of separate dictionaries | Grouping by combination |
Direct product() |
Single dictionaries | Simple, readable code |
Conclusion
Use itertools.product() to generate all possible combinations from dictionary values. The first and third methods produce unified dictionaries, while the second method creates separate key-value dictionaries for each combination.
