def named_product(**items):
    names = list(items.keys())
vals = list(items.values())
for res in itertools.product(*vals):
    yield dict(zip(names, res))
Name parts of iterables in itertools.products