def desigil(value, **sigils):
    """
    Parse a ``{sigil: value}`` expression and unpack the value inside.
    """
    if isinstance(value, dict) and len(value) == 1:
        for sig, typ in sigils.items():
            try:
                inner = value[sig]
            except KeyError:
                pass
            else:
                if not isinstance(inner, typ):
                    raise ValueError(
                        'This Dynamo value {} must have a member encoded as type {}'
                        .format(sig, typ.__name__))
                return sig, inner
    for sig, typ in sigils.items():
        break
    raise ValueError(
        'This Dynamo value must be encoded as a single-item dict {%r: %s}' %
        (sig, typ.__name__))
