Invertir cadenas de formato de estilo C en Python (`%`)

Introducción y configuración

Supongamos que tengo una cadena 'plantilla' * del formulario,

>>> template = """My %(pet)s ate my %(object)s.
... This is a float: %(number)0.2f.
... %(integer)10d is an integer on a newline."""

Con esta plantilla puedo generar una nueva cadena con,

>>> d = dict(pet='dog', object='homework', number=7.7375487, integer=743898,)

>>> out_string = template % d

>>> print(out_string)
My dog ate my homework.
This is a float: 7.74.
    743898 is an integer on a newline.

¡Que agradable!

Pregunta

Me gustaria aplicartemplate aout_string para producir un nuevodict. Algo como,

>>> d_approx_copy = reverse_cstyle_template(out_string, template)
>>> print(d_approx_copy)
{pet='dog', object='homework', number=7.74, integer=743898,}

¿Hay alguna manera pitónica de hacer esto? ¿Ya existe una implementación? **

Notas

*: No estoy usandoModelo porque, AFAIK, actualmente no admitenmarcha atrás.

**: Soy consciente de lariesgos asociado con la pérdida de precisión ennumber (de7.7375487 a7.74) Puedo lidiar con eso. Solo estoy buscando una manera simple de hacer esto.

Respuestas a la pregunta(1)

Su respuesta a la pregunta