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.

¿Atributos de diccionario invertidos establecidos en identificadores?

Tengo el siguiente diccionario de traducción:

{0: {‘a’, ‘b’, ‘c’},
1: {‘a’, ‘b’, ‘c’, ‘d’},
2: {‘k’, ‘b’, ‘e’, ‘a’, ‘n’}}

Y quiero ‘invertirlo’ para que los atributos sean las claves (las claves se utilizan como una forma de identificación).
Dado un conjunto de atributos, dame el id (clave) relevante.

Por ejemplo, dado {‘a’, ‘b’, ‘c’}, devuelve 0.

¿Cuál es la mejor práctica para hacer esto? Los atributos pueden llegar en un orden diferente, por eso estoy utilizando conjuntos.
¿Debo insertarlo en un dataframe (tabla de traducción)? ¿O hay otra solución?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una solución a este problema es recorrer cada par de clave y valor en el diccionario original y verificar si el conjunto de atributos coincide con el conjunto de valores para esa clave. Si hay una coincidencia, se devuelve la clave. Esto se puede implementar en una función de la siguiente manera:

    def reverse_translation_dict(translation_dict, attributes):
        for key, value_set in translation_dict.items():
            if set(attributes) == value_set:
                return key
        # si no se encuentra ninguna coincidencia
        return None
    

    Esta función se puede usar de la siguiente manera:

    translation_dict = {
        0: {'a', 'b', 'c'},
        1: {'a', 'b', 'c', 'd'},
        2: {'k', 'b', 'e', 'a', 'n'}
    }
    
    attributes = ['a', 'b', 'c']
    key = reverse_translation_dict(translation_dict, attributes)
    print(key)  # muestra: 0
    

    Esta solución no requiere el uso de un dataframe y debería ser eficiente para diccionarios de traducción de tamaño pequeño a mediano.

Comments are closed.