code: def cartesian_lists(d):
      
      return [{k: v for k, v in zip(d.keys(), args)}
              for args in itertools.product(*d.values())]
docs: turns a dict of lists into a list of dicts that represents
      the cartesian product of the initial lists
  
      Example
      -------
      cartesian_lists({'a':[0, 2], 'b':[3, 4, 5]}
      returns
      [ {'a':0, 'b':3}, {'a':0, 'b':4}, ... {'a':2, 'b':5} ]