Estoy escribiendo un programa que almacena datos en un objeto de diccionario, pero estos datos deben guardarse en algún momento durante la ejecución del programa y cargarse nuevamente en el objeto de diccionario cuando el programa se ejecute nuevamente. ¿Cómo convertiría un objeto de diccionario en una cadena que se pueda escribir en un archivo y volver a cargar en un objeto de diccionario? Con suerte, esto admitirá diccionarios que contengan diccionarios.
python
json
dictionary
serialization
AJ00200
fuente
fuente
import json
que hice!Si su diccionario no es demasiado grande, tal vez str + eval pueda hacer el trabajo:
Puede usar ast.literal_eval en lugar de eval para obtener seguridad adicional si la fuente no es de confianza.
fuente
Yo uso
json
:fuente
Use el
pickle
módulo para guardarlo en el disco y cargarlo más tarde.fuente
¿Por qué no utilizar incorporado de Python 3 ast función de biblioteca literal_eval . Es mejor usar literal_eval en lugar de eval
dará salida como diccionario real
Y si está pidiendo convertir un diccionario en una cadena , entonces, ¿qué tal usar el método str () de Python?
Supongamos que el diccionario es:
Y esto se hará así:
Imprimirá:
Esto es lo fácil que te gusta.
fuente
Si en chinses
fuente
Convertir diccionario en JSON (cadena)
te conseguirá:
Convertir cadena en diccionario
fuente
Creo que debería considerar el uso del
shelve
módulo que proporciona objetos persistentes de tipo diccionario respaldados por archivos. Es fácil de usar en lugar de un diccionario "real" porque proporciona casi transparentemente a su programa algo que se puede usar como un diccionario, sin la necesidad de convertirlo explícitamente en una cadena y luego escribir en un archivo (o viceversa). viceversa).La principal diferencia es necesitarlo inicialmente
open()
antes del primer uso y luegoclose()
cuando termine (y posiblementesync()
hacerlo, dependiendo de lawriteback
opción que se esté usando). Cualquier archivo de "estantería" creado por los objetos puede contener diccionarios regulares como valores, lo que permite anidarlos lógicamente.Aquí hay un ejemplo trivial:
Salida:
fuente
Si te importa la velocidad, usa ujson (UltraJSON), que tiene la misma API que json:
fuente
Utilizo yaml para eso si necesita ser legible (ni JSON ni XML son eso en mi humilde opinión), o si la lectura no es necesaria, uso pickle.
Escribir
Lee atrás
fuente
b
flag al abrir el archivo aquí.dumps()
predeterminado es el protocolo 0, que es un protocolo ASCII. Por eso'rb'
no es necesario en mi humilde opinión.