Хорошо, спасибо @dfan за сообщение, что я искал не в том месте.Теперь я понял:
from itertools import product
def my_product(inp):
return (dict(zip(inp.keys(), values)) for values in product(*inp.values())
РЕДАКТИРОВАТЬ : после многолетнего опыта работы с Python, я думаю, что лучшее решение - принять kwargs
вместо словаря входных данных;стиль звонка больше похож на стиль оригинала itertools.product
.Также я думаю, что написание функции генератора, а не функции, которая возвращает выражение генератора, делает код более понятным.Итак:
def product_dict(**kwargs):
keys = kwargs.keys()
vals = kwargs.values()
for instance in itertools.product(*vals):
yield dict(zip(keys, instance))
и если вам нужно передать в диктанте, list(product_dict(**mydict))
.Одно заметное изменение, использующее kwargs
вместо произвольного входного класса, заключается в том, что он предотвращает упорядочение ключей / значений, по крайней мере, до Python 3.6.