Al revisar un diccionario anidado usando una cadena de notación de puntos "a.b.c.d.e", se crean automáticamente los niveles faltantes

Este me está perdiendo la cabeza. Dado el siguiente diccionario:

    d = {"a":{"b":{"c":"winning!"}}}

Tengo esta cadena (de una fuente externa, y no puedo cambiar esta metáfora).

    k = "a.b.c"

Necesito determinar si el diccionariotiene la llave 'c', así que puedo agregarlo si no lo hace.

Esto funciona perfectamente para recuperar un valor de notación de puntos:

    reduce(dict.get, key.split("."), d)

pero no puedo averiguar cómo "reducir" una comprobación has_key o algo así.

Mi último problema es el siguiente: dado "a.b.c.d.e", necesito creartodos los elementos necesarios en el diccionario, pero no pisarlas si ya existen. Si alguien sabe una manera increíble de hacer todo eso, serás mi héroe.

Respuestas a la pregunta(4)

Su respuesta a la pregunta