The "standard" way (mostly common, but some exceptions) to do this in Cartesian (since # of items can vary) is to use ``Params.object_params()`` and ``Params.objects()``.  It's a bit cleaner of an interface since it will allow you to share the keys across multiple variants and have a set of "default" values (optional).  It's also trivial to support in code since the ``Params`` class handles enumeration and name de-mangling for you.  If you use it here, it would look something like:

    lvsb_option_names: "options1 options2 options3"
    lvsb_network_options1 = "dhcp,source=default"
    lvsb_network_options2 = "dhcp,mac=00:44:33:22:11:55"
    lvsb_network_options3 = "address=192.168.122.100/24,route=0.0.0.0/24%192.168.122.1"

In your code, then you only have at most, two keys to check:

    for set_name in params.objects("lvsb_option_names"):
        set_params = params.object_params(set_name)
        lvsb_network = set_params.get("lvsb_network")   # lvsb_network_options1...2...3...etc.

To be fair, I like your 'lvsb_opts_count' way better though since it doesn't need to name the sets.  Maybe you would consider adding the parser method to ``virttest/utils_params.py Params()`` class?