Este me está volviendo loco. Dado el siguiente diccionario:Comprobando un diccionario usando una cadena de notación de puntos
d = {"a":{"b":{"c":"winning!"}}}
tengo esta cadena (de una fuente externa, y no puedo cambiar esta metáfora).
k = "a.b.c"
necesito para determinar si el diccionario tiene la llave 'c', así que puedes añadir si no lo hace.
Esto funciona de maravillas para recuperar un valor de notación de puntos:
reduce(dict.get, key.split("."), d)
pero no puedo encontrar la manera de 'reducir' un cheque has_key ni nada de eso.
Mi problema principal es la siguiente: dado "a.b.c.d.e", Necesito crear todos los elementos necesarios en el diccionario, pero no pisar ellos si ya existen. Si alguien sabe cómo hacer todo eso, serás mi héroe.
Sí, simplemente aceptar sus propias respuestas a sus preguntas. Eso está perfectamente bien (incluso deseado, para que las personas que tengan la misma pregunta verán que existe una respuesta). –
Por casualidad, ¿la fuente es realmente Cocoa KVC? Y, si es así, ¿puedes usar PyObjC en lugar de Python puro? (Además de ser más simple, eso también garantizaría que las claves significan exactamente lo mismo para lo que están destinadas, incluso si hay errores en el código de otras personas ...) – abarnert
¿Qué tiene de especial el uso de la notación de puntos 'como cadena' para buscar a través del diccionario? Uno tiene que usar alguna función adicional para ello. ¿Qué hay para buscar dicts multidimensionales estilo JS, sin ningún tipo de cadenas 'x = conf.a.b.c'. No sé si es posible en Python. Pero usar una cuerda no es genial – Green