Actually I was thinking just for the inside loop, keep the dict outside.  For example,  I think something like this could work: 

    class Params():
        ...
        def object_counts(self, count_key, base_name):
            count = self.get(count_key, None)
            if count is None:
                return []
            cpy = self.copy() # Protect in case original is modified for some reason
            for number in xrange(1, int(count) + 1):
                key = "%s%s" % (base_name, number)
                yield cpy.get(key)

Then code could loop with it based on the name and leave the numbers up to params:

    for key, value in _lvsb_option_mapper.items():
        base_name = 'lvsb_%s_options' % key
        for options in params.object_counts('lvsb_opts_count', base_name):
            if options and value:
               self.opts.append(value, options)

Not a lot different from what you have, but it would allow other code to use this handy dandy new Params method :)