No devuelve ninguno si la clave del diccionario no está disponible

Necesito una forma de obtener un valor de diccionario si su clave existe, o simplemente devolver None , si no existe.

Sin embargo, Python genera una excepción KeyError si busca una clave que no existe. Sé que puedo verificar la clave, pero estoy buscando algo más explícito. ¿Hay una manera de simplemente devolver None si la clave no existe?

Puedes usar get()

 value = d.get(key) 

que devolverá None si la 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") 

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

     >>> ayuda (dict)

     Ayuda en clase dict en módulos incorporados:

     clase dict (objeto)
      |  dict () -> nuevo diccionario vacío
      |  dict (mapeo) -> nuevo diccionario inicializado desde un objeto de mapeo
      |  (clave, valor) pares
     ...
      |  
      |  obtener(...)
      |  D.get (k [, d]) -> D [k] si k en D, sino d.  d por defecto a ninguno.
      |  
     ...

Utilizar dict.get

Debes usar el método get() de la clase dict

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

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

Si desea una solución más transparente, puede dict subclase de dict para obtener este comportamiento:

 class NoneDict(dict): def __getitem__(self, key): return dict.get(self, key) >>> foo = NoneDict([(1,"asdf"), (2,"qwerty")]) >>> foo[1] 'asdf' >>> foo[2] 'qwerty' >>> foo[3] is None True 

Usualmente uso un defaultdict para situaciones como esta. Usted suministra un método de fábrica que no toma argumentos y crea un valor cuando ve una nueva clave. Es más útil cuando desea devolver algo así 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' 

Podría usar el método get() un objeto dict , como ya han sugerido otros. Alternativamente, dependiendo de lo que esté haciendo exactamente, puede usar una suite de try/except como esta:

 try:  except KeyError:  

Lo que se considera un enfoque muy “pythonico” para manejar el caso.

Como otros han dicho anteriormente, puedes usar get ().

Pero para buscar una clave, también puedes hacer:

 d = {} if 'keyname' in d: # d['keyname'] exists pass else: # d['keyname'] does not exist pass 

Una solución de una línea sería:

 item['key'] if 'key' in item else None 

Esto es útil cuando se trata de agregar valores de diccionario a una nueva lista y desea proporcionar un valor predeterminado:

p.ej.

 row = [item['key'] if 'key' in item else 'default_value'] 

Si puedes hacerlo con False , también está la función incorporada hasattr :

 e=dict() hasattr(e, 'message'): >>> False 

Puede anular __missing__(self, key) al hacer una subclase de dict y devolver Ninguno.

 class MyDict(dict): def __missing__(self, key): return None