Tengo un dict grande de pitón creado a partir de datos json y estoy creando un dict más pequeño del grande. Algunos elementos del diccionario grande tienen una clave llamada 'detalles' y algunos elementos no. Lo que quiero hacer es verificar si la clave existe en cada entrada en el diccionario grande y si no, anexar la clave 'detalles' con el valor 'No hay detalles disponibles' para el nuevo diccionario. Estoy poniendo un código de muestra debajo solo como una demostración. El LargeDict es mucho más grande con muchas teclas en mi código, pero lo mantengo simple para mayor claridad.Compruebe si la clave existe en el diccionario. Si no, añádalo
LargeDict = {'results':
[{'name':'john','age':'23','datestart':'12/07/08','department':'Finance','details':'Good Employee'},
{'name':'barry','age':'26','datestart':'25/08/10','department':'HR','details':'Also does payroll'},
{'name':'sarah','age':'32','datestart':'13/05/05','department':'Sales','details':'Due for promotion'},
{'name':'lisa','age':'21','datestart':'02/05/12','department':'Finance'}]}
Esta es la forma en que estoy recibiendo los datos para el SmallDict:
SmallDict = {d['name']:{'department':d['department'],'details':d['details']} for d in LargeDict['results']}
recibo un error clave, sin embargo, cuando uno de los grandes entradas de diccionario no tiene detalles. ¿Estoy en lo cierto al decir que necesito usar el módulo DefaultDict
o hay una manera más fácil?
+1 (a partir de los documentos) dict.setdefault(): "Si la clave está en el diccionario, devolver su valor si no, introduzca la llave con un valor de defecto y de retorno. predeterminado. Por defecto, el valor predeterminado es Ninguno. " – heltonbiker
Sí. Utilizar esta. defaultdict es una criatura malvada para los incautos. – javadba
FWIW, creo que 'defaultdict' es genial. Principalmente, no creo que valga la pena convertir un 'dict' normal a un' defaultdict' si lo obtuviste de otra fuente. Los "males" de 'defaultdict' se pueden eludir simplemente estableciendo el atributo' default_factory' en 'None' (lo que hará que se comporte como un dict regular una vez más). – mgilson