code: def _dictproduct(rdict):
          '''
          Yields a series of dicts that cover the combination of all multiple-value (e.g. lists or tuples) values, with
          non-multiple-value values remaining the same.
          '''
          multkeys = [k for k, v in rdict.items() if isinstance(v, Iterable)]
          if not multkeys:
              yield rdict
              return
  
          multvals = [rdict[k] for k in multkeys]
  
          for combo in itertools.product(*multvals):
              newdict = rdict.copy()
              for i, k in enumerate(multkeys):
                  newdict[k] = combo[i]
              yield newdicf _dictproduct(rdict):
          '''
          Yields a series of dicts that cover the combination of all multiple-value (e.g. lists or tuples) values, with
          non-multiple-value values remaining the same.
          '''
          multkeys = [k for k, v in rdict.items() if isinstance(v, Iterable)]
          if not multkeys:
              yield rdict
              return
  
          multvals = [rdict[k] for k in multkeys]
  
          for combo in itertools.product(*multvals):
              newdict = rdict.copy()
              for i, k in enumerate(multkeys):
                  newdict[k] = combo[i]
              yield newdict
docs: Yields a series of dicts that cover the combination of all multiple-value (e.g. lists or tuples) values, with
          non-multiple-value values remaining the same.