Задача для itertools.product
:
>>> from itertools import product
>>> for dict_items in product(*[product([k],v) for k, v in my_dict.items()]):
... print(dict(dict_items))
{'a': 1, 'b': 10, 'c': 4, 'd': 11}
{'a': 1, 'b': 10, 'c': 5, 'd': 11}
{'a': 2, 'b': 10, 'c': 4, 'd': 11}
{'a': 2, 'b': 10, 'c': 5, 'd': 11}
{'a': 3, 'b': 10, 'c': 4, 'd': 11}
{'a': 3, 'b': 10, 'c': 5, 'd': 11}
Небольшое объяснение:
Внутренний product(...)
расширит диктат до списка, такого как [[(k1, v11), (k1, v12), ...], [(k2, v21), (k2, v22), ...], ...]
.
Внешний product(...)
соберет списки элементов, выбрав один кортеж из каждого списка.
dict(...)
создаст словарь из последовательности (k1, v#), (k2, v#), ...
кортежей.