Realmente dos preguntas: si tengo un diccionario (que originalmente vino de analizar un mensaje json) que tiene una matriz opcional en ella:Python: Combine "if 'x' in dict" y "for i in dict ['x']"
dict_with = {'name':'bob','city':'san francisco','kids': {'name': 'alice'} }
dict_without = {'name':'bob','city':'san francisco' }
me normalmente tienen un código como:
if 'kids' in dict:
for k in dict['kids']:
#do stuff
Mi primera pregunta ¿hay alguna forma de pitón para combinar la protección y si el bucle?
La segunda cuestión es que mi instinto me dice que el mejor diseño para el mensaje JSON original sería especificar siempre el elemento de niños, sólo con un diccionario vacío:
dict_better = {'name':'bob','city':'san francisco','kids': {} }
No puedo encontrar ninguna metodología de diseño eso corrobora esto. El mensaje json es un mensaje de estado de un servicio web que admite representaciones json y xml. Como comenzaron con xml, lo hicieron para que el elemento "niños" fuera opcional, lo que obliga a la construcción anterior a verificar si el elemento existe antes de iterar sobre la matriz. Me gustaría saber si es mejor diseñarlo para decir que el elemento es obligatorio (solo con una matriz vacía si no hay elementos).
Para cualquiera que no lo sepa, 'dict.get (clave, predeterminado)' devuelve el valor asociado con 'key' si existe o' default' si no lo tiene. – DGH
... y '()' es la tupla vacía. Instintivamente, me habría ido con '[]', pero de todos modos no hay diferencia práctica. – delnan
@delnan es muy posible que su instinto sea usar [] porque tantas funciones de biblioteca estándar devuelven listas independientemente del tipo de secuencia de entrada (por ejemplo, 'ordenado'). Mi instinto es preferir() porque documenta mi falta de deseo de hacer cualquiera de las cosas con el resultado de que requieren una lista. ;) –