'Parse all expected params from the query dictionary `query_params`.
If param is required and not present, raises a `KeyError`.'

def parse_parameter_dictionary(self, trans, param_config_dict, query_params, param_modifiers=None):

    params_that_modify_other_params = self.parse_parameter_modifiers(trans, param_modifiers, query_params)
    resources = {}
    for (param_name, param_config) in param_config_dict.items():
        var_name_in_template = param_config.get('var_name_in_template', param_name)
        resource = None
        query_val = query_params.get(param_name, None)
        if (query_val is not None):
            try:
                target_param_modifiers = params_that_modify_other_params.get(param_name, None)
                resource = self.parse_parameter(trans, param_config, query_val, param_modifiers=target_param_modifiers)
            except Exception as exception:
                if trans.debug:
                    raise
                else:
                    log.warning('Exception    parsing    visualization    param    from    query:    %s,    %s,    (%s)    %s', param_name, query_val, str(type(exception)), str(exception))
                resource = None
        if (resource is None):
            if param_config['required']:
                raise KeyError(('required    param    %s    not    found    in    URL' % param_name))
            resource = self.parse_parameter_default(trans, param_config)
        resources[var_name_in_template] = resource
    return resources
