2012-01-04 12 views
5

A menudo me cuesta la siguiente sintaxis if/else y esperaba que algunas personas pudieran darme algunas de sus opiniones sobre lo que ellos piensan que es más claro o si esto viola cualquier Pythonisms (He buscado y no he podido encontrar nada).Python Si entonces estilo Else al obtener valores de Dicts

¿Está uno de estos mejor y más correcto o incorrecto?

value = None 
if 'value' in some_dict: 
    value = some_dict['value'] 

some_func(value=value) 

O:

if 'value' in some_dict: 
    value = some_dict['value'] 
else: 
    value = None 

some_func(value=value) 

O:

some_func(value=some_dict.get('value', None)) 

pude ver razones para todos.

Respuesta

8

Por supuesto, la última descripción es la mejor para el caso dict.get.

Sólo una nota - segundo parámetro a get es superfluo, basta con escribir:

some_func(value=some_dict.get('value')) 
1

Esto se ve más natural para mí:

value = some_dict.get('value') 
some_func(value=value) 

O: el último caso. La pregunta fue editada mientras respondía.

1

Utilice el método get() del dict como en su tercer ejemplo. Ese caso de uso es exactamente lo que está allí.

0

esto es sólo una cuestión de estilo, me gustaría utilizar el último sólo porque es más sucinta (y aviso se puede omitir el None, ya que es el valor por defecto)

por cierto también hay esto:

value = some_dict['value'] if 'value' in some_dict else None 

pero eso es exactamente lo que hace .get()

0

Como dijeron los otros, el método dict.get() parece ser el más adecuado para lo que necesita.

PERO, si no quiere poner en marcha el método si el valor no estaba en el dictionnary, una forma Pythonic (según la EAFP principle) habría sido:

try: 
    some_func(some_dict['value']) 
except KeyError: 
    pass 
Cuestiones relacionadas