import hashlib


def munch_abbreviation_string(m):
    """
    Given a Munch, create a string that communicates the contents
    of the k,v pairs in a concise human-readable way.  E.g.

    m = Munch(
        my_special_value=0.1,
        something_else='yoda',
        a_list=['joe','bob'],
    )

    becomes => msv_0.1-se_yoda-al_joe.bob

    If any str(v) is longer than 32, it will be converted to hexdigest
    """
    parts = []
    for k, v in m.items():
        abbrev = "".join(map(lambda s: s[0], k.split("_")))
        v = ".".join(map(str, v)) if isinstance(v, list) else str(v)
        if len(v) > 32:
            v = hashlib.md5(v.encode()).hexdigest()
        parts += [f"{abbrev}_{v}"]
    return "-".join(parts)