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.

¿Cómo adjuntar múltiples diccionarios a una lista desde un bucle en Python?

¿Cómo se pueden agregar diccionarios que cada ciclo genera a una lista para que al final mi función devuelva una lista de n-diccionarios? Sin bibliotecas sofisticadas, solo Python simple.

def inner_loop(*args):
    for X, y in zip(X, y):
        a_dict = {'t':None, 'p':None}
        t_range = range(1, 10)
        p_range = range('high','low')
        best_acc = 0
        list_of_dicts = []

    #mejor selección de cuadrícula
    for t in t_range:
        for p in p_range:
            model(X, temp=t, press=p)
            predict = model.predicting(y)
            acc = (np.sum(predict == y))/len(y)

            if acc > best_acc:
                best_acc = acc
                a_dict['t']= t
            elif p == 'high':
                a_dict['p']='high'
            elif p == 'low': 
                a_dict['p']='low'

    list_of_dicts.append(a_dict)

    return list_of_dicts

La función devuelve instancias de diccionarios, pero nunca una lista de todos los diccionarios que se generaron. ¿Alguien puede ayudar con esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para agregar diccionarios generados por cada bucle a una lista y devolver una lista de n-diccionarios, es necesario declarar list_of_dicts fuera de los bucles y luego agregar a_dict al final de cada iteración del bucle interior.

    Así es como se puede modificar el código para lograr esto:

    def inner_loop(X, y):
        t_range = range(1, 10)
        p_range = ['high', 'low']
        list_of_dicts = []
    
        for X_data, y_data in zip(X, y):
            a_dict = {'t': None, 'p': None}
            best_acc = 0
    
            #mejor selección de grilla
            for t in t_range:
                for p in p_range:
                    model(X_data, temp=t, press=p)
                    predict = model.predicting(y_data)
                    acc = (np.sum(predict == y_data))/len(y_data)
    
                    if acc > best_acc:
                        best_acc = acc
                        a_dict['t'] = t
                        a_dict['p'] = p
    
            list_of_dicts.append(a_dict)
    
        return list_of_dicts
    

    Aquí, list_of_dicts se inicializa fuera de ambos bucles, y a_dict se agrega a él una vez que el bucle interior ha completado sus iteraciones. La declaración return también se mueve fuera de ambos bucles para devolver una lista de todos los diccionarios.

    Nota: También he modificado los nombres de variables dentro de la función ya que algunos de ellos no estaban definidos. Puede que necesite modificarlos según su caso de uso.

Comments are closed.