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.

Python obtén clave para diccionario evalúa parte predeterminada incluso cuando la clave existe.

Mi comprensión de dict.get() era que si la clave existe, entonces no se evalúa el argumento predeterminado. Y varias fuentes implicitamente dejan esta clase de interpretación. Pero resulta que no es el caso.

Supongamos que hay un diccionario que tiene claves enteras en formato de cadena o entero. Entonces, una línea para recuperar un valor por tipo de clave sería usar .get con un valor predeterminado dependiendo de la clave de un tipo alternativo.

d = {‘2’:4}
d.get(2, d[‘2’])
4
d.get(‘2’, d[2])
Traceback (most recent call last):
File ““, line 1, in
KeyError: 2

¿Cuál es el punto de evaluar el argumento predeterminado si la clave existe?
¿Es solo un diseño defectuoso del método o estoy generalizando demasiado la funcionalidad prevista de .get()?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El método .get() en un diccionario de Python recupera un valor correspondiente a una clave. Toma dos argumentos: clave y valor predeterminado, donde el valor predeterminado es opcional. Si la clave está presente en el diccionario, se devuelve el valor correspondiente. Si la clave no está presente, se devuelve el valor predeterminado. Si no se proporciona el argumento de valor predeterminado, se establece en None.

    En cuanto a la pregunta sobre cómo se evalúa el argumento de valor predeterminado cuando la clave ya existe, parece que siempre se evalúa, independientemente de si la clave está presente o no. Este comportamiento puede parecer contrario a la intuición, pero está documentado en la documentación de Python para el método .get().

    En el ejemplo de código proporcionado, cuando se llama a d.get('2', d[2]), Python intenta recuperar el valor correspondiente a la clave '2'. Debido a que esta clave está presente en el diccionario, se devuelve el valor 4. Sin embargo, el segundo argumento d[2] aún se evalúa, lo que resulta en un KeyError porque la clave 2 no está presente en el diccionario.

    Por lo tanto, se puede concluir que el argumento de valor predeterminado siempre se evalúa, incluso si la clave está presente en el diccionario. Este comportamiento no es un diseño defectuoso del método, sino una funcionalidad prevista.

Comments are closed.