Devuelve un valor predeterminado si una clave de diccionario no está disponible

Resuelto Spyros asked hace 13 años • 15 respuestas

Necesito una forma de obtener un valor de diccionario si su clave existe, o simplemente devolverlo None, si no es así.

Sin embargo, Python genera una KeyErrorexcepción si busca una clave que no existe. Sé que puedo buscar la clave, pero estoy buscando algo más explícito. ¿ Hay alguna manera de regresar Nonesi la clave no existe?


Ver también: ¿Por qué dict.get(key) en lugar de dict[key]?

Spyros avatar May 26 '11 03:05 Spyros
Aceptado

Puedes usardict.get()

value = d.get(key)

que volverá Nonesi key is not in d. También puede proporcionar un valor predeterminado diferente que se devolverá en lugar de None:

value = d.get(key, "empty")
Tim Pietzcker avatar May 25 '2011 20:05 Tim Pietzcker

Extrañar más. Está integrado en el idioma.

    >>> ayuda(dictar)

    Ayuda sobre dictado de clases en módulos incorporados:

    dictado de clase (objeto)
     | dict() -> nuevo diccionario vacío
     | dict(mapping) -> nuevo diccionario inicializado a partir de un objeto de mapeo
     | pares (clave, valor)
    ...
     |  
     | conseguir(...)
     | D.get(k[,d]) -> D[k] si k en D, en caso contrario d. d tiene el valor predeterminado Ninguno.
     |  
    ...
John La Rooy avatar May 25 '2011 21:05 John La Rooy

Deberías usar el get()método de la dictclase.

d = {}
r = d.get('missing_key', None)

Esto resultará en r == None. Si la clave no se encuentra en el diccionario, la función get devuelve el segundo argumento.

dusktreader avatar May 25 '2011 20:05 dusktreader

Usardict.get

Devuelve el valor de la clave si la clave está en el diccionario; en caso contrario, es el valor predeterminado. Si no se proporciona el valor predeterminado, el valor predeterminado es Ninguno, de modo que este método nunca genera un KeyError.

Daenyth avatar May 25 '2011 20:05 Daenyth

Normalmente uso un defaultdict para situaciones como esta. Proporciona un método de fábrica que no acepta argumentos y crea un valor cuando ve una nueva clave. Es más útil cuando desea devolver algo como una lista vacía en claves nuevas ( consulte los ejemplos ).

from collections import defaultdict
d = defaultdict(lambda: None)
print d['new_key']  # prints 'None'
job avatar May 25 '2011 21:05 job