I want to get all combinations of the values in a dictionary as multiple dictionaries (each containing every key of the original but only one value of the original values). Say I want to parametrize a function call with:
kwargs = {'a': [1, 2, 3], 'b': [1, 2, 3]}
How do I get a list of all the combinations like this:
combinations = [{'a': 1, 'b': 1}, {'a': 1, 'b': 2}, {'a': 1, 'b': 3},
{'a': 2, 'b': 1}, {'a': 2, 'b': 2}, {'a': 2, 'b': 3},
{'a': 3, 'b': 1}, {'a': 3, 'b': 2}, {'a': 3, 'b': 3}]
There can be an arbitary amount of keys in the original kwargs
and each value is garantueed to be an iterable but the number of values is not fixed.
If possible: the final combinations
should be a generator (not a list).
You can flatten the
kwargs
to something like thisThen, you can use
itertools.product
like thisitertools.product
actually returns an iterator. So you can get the values on demand and build your dictionaries. Or you can usemap
, which also returns an iterator.