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.

Creación de un diccionario en Python con valores condicionales añadidos

Quiero crear un diccionario a partir de 2 matrices de numpy, arr1 como las claves del diccionario y arr2 como los valores del diccionario. El problema que encontré es el hecho de que no quiero simplemente agregar valores a las claves en ese orden, sino agregar un valor específico si una condición para una clave, elemento de arr1, se cumple. Para eso, tengo otra matriz de numpy arr3 con un elemento más que arr1 y arr2, y si una clave está entre el índice actual y el siguiente elemento de arr3, [i, i+1), el valor con índice correspondiente al actual será el valor asociado a la clave actual.

Por ejemplo:

dict = {}
arr1 = np.array([0,9])
arr2 = np.array([0,5])
arr3 = np.array([0,5,10])

el diccionario debería ser {0:0, 9:5}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear el diccionario deseado, podemos iterar sobre los elementos de arr1 y compararlos con los elementos de arr3 utilizando la función searchsorted de numpy para determinar el índice apropiado de arr3 para cada clave. Luego podemos usar este índice para seleccionar el valor correspondiente de arr2 y agregarlo al diccionario con la clave actual de arr1.

    Aquí hay un ejemplo de código que logra esto:

    import numpy as np
    
    arr1 = np.array([0,9])
    arr2 = np.array([0,5])
    arr3 = np.array([0,5,10])
    
    # crear un diccionario vacío
    my_dict = {}
    
    # iterar sobre los elementos de arr1
    for i, key in enumerate(arr1):
        # encontrar el índice en arr3 que corresponde a esta clave
        index = np.searchsorted(arr3, key)
        # usar este índice para seleccionar el valor correspondiente de arr2
        value = arr2[index-1]
        # agregar el par clave-valor al diccionario
        my_dict[key] = value
    

    Después de ejecutar este código, my_dict debería ser {0: 0, 9: 5} como se desea.

Comments are closed.