es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Guardar un diccionario de conjuntos en Python MongoDB

Tengo un diccionario de conjuntos que quiero guardar de forma persistente en la base de datos de MongoDB. Sin embargo, recibo el error “No se puede codificar el objeto: {1, 2}, de tipo: ” en el proceso de guardado. Vi una publicación donde un usuario sugirió guardar cada conjunto como un diccionario, pero eso no me parece una buena solución. ¿Hay alguna otra forma, aparte de transformar cada conjunto en una lista, de guardar el diccionario con conjuntos? El diccionario se ve algo así como el siguiente código pero más complejo y con miles de entradas con una clave de tipo string y valores de set():

python
{'One': {1, 2}, 'Two': {3, 4}, 'Three': {5, 6}}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una forma de resolver este problema es utilizar un codificador JSON personalizado para serializar los objetos de tipo set. El módulo json en Python proporciona una manera de definir codificadores y decodificadores personalizados a través de las clases JSONEncoder y JSONDecoder.

    Aquí tienes un ejemplo de cómo utilizar un codificador personalizado para manejar los sets:

    import json
    from bson import json_util
    from pymongo import MongoClient
    
    # Define el codificador JSON personalizado que puede manejar sets
    class SetEncoder(json.JSONEncoder):
        def default(self, obj):
            if isinstance(obj, set):
                return list(obj)
            return json.JSONEncoder.default(self, obj)
    
    # Crea un diccionario de sets
    my_dict = {'Uno': {1, 2}, 'Dos': {3, 4}, 'Tres': {5, 6}}
    
    # Conéctate a MongoDB
    cliente = MongoClient('localhost', 27017)
    db = cliente['mi_db']
    colección = db['mi_colección']
    
    # Utiliza el codificador personalizado para convertir el diccionario a formato JSON
    json_dict = json.dumps(my_dict, cls=SetEncoder)
    
    # Inserta los datos JSON en MongoDB
    resultado = colección.insert_one(json_util.loads(json_dict))
    

    En este ejemplo, definimos un codificador JSON personalizado llamado SetEncoder que puede manejar sets convirtiéndolos en listas. Luego utilizamos este codificador para serializar nuestro diccionario de sets en formato JSON. Por último, insertamos los datos JSON en nuestra base de datos MongoDB utilizando la función json_util.loads() de la biblioteca PyMongo, que puede manejar tipos de datos JSON extendidos como identificadores de objetos y fechas.

    Al utilizar un codificador personalizado, podemos guardar nuestro diccionario de sets en MongoDB sin tener que convertir cada set en una lista o un diccionario.

Comments are closed.