import itertools


def dict_list_cartesian_product(**kwargs) -> list:
	""" Given a dictionary whose values are lists, creates a list with every possible dictionary combination and regular unpacked values.
	Adapted from the Propheticus function in propheticus.shared.Utils.cartesianProductDictionaryLists. """
	keys, values = zip(*kwargs.items())
	return [dict(zip(keys, prod)) for prod in itertools.product(*values)]