code: def _map_and_prefix_keys(self, key_iterable, key_prefix):
          
          # Check it just once ...
          key_extra_len=len(key_prefix)
          if key_prefix and self.do_check_key:
              self.check_key(key_prefix)
  
          # server (_Host) -> list of unprefixed server keys in mapping
          server_keys = {}
  
          prefixed_to_orig_key = {}
          # build up a list for each server of all the keys we want.
          for orig_key in key_iterable:
              if isinstance(orig_key, tuple):
                  # Tuple of hashvalue, key ala _get_server(). Caller is essentially telling us what server to stuff this on.
                  # Ensure call to _get_server gets a Tuple as well.
                  str_orig_key = str(orig_key[1])
                  server, key = self._get_server((orig_key[0], key_prefix + str_orig_key)) # Gotta pre-mangle key before hashing to a server. Returns the mangled key.
              else:
                  str_orig_key = str(orig_key) # set_multi supports int / long keys.
                  server, key = self._get_server(key_prefix + str_orig_key)
  
              # Now check to make sure key length is proper ...
              if self.do_check_key:
                  self.check_key(str_orig_key, key_extra_len=key_extra_len)
  
              if not server:
                  continue
  
              if server not in server_keys:
                  server_keys[server] = []
              server_keys[server].append(key)
              prefixed_to_orig_key[key] = orig_key
  
          return (server_keys, prefixed_to_orig_key)
docs: Compute the mapping of server (_Host instance) -> list of keys to stuff onto that server, as well as the mapping of
          prefixed key -> original key.