2012-02-21 7 views
9

¿Hay una forma de hacer esto a continuación?Python del si en el diccionario en una línea

myDict = {} 
if 'key' in myDic: 
    del myDic['key'] 

gracias

+2

primero que hay que hacer con este tipo de preguntas: 'leer los documentos dict' por completo. –

+0

@ user683111: debe aceptar la respuesta, si le funcionó :) – avasal

+2

posible duplicado de [¿Cómo eliminar una clave del diccionario?] (Http://stackoverflow.com/questions/11277432/how-to-remove- a-key-from-dictionary) – strongMA

Respuesta

18

Puede escribir

myDict.pop(key, None) 
+0

gracias, exactamente lo que quería – scruffyDog

+0

Solo debe eliminarlo si 'clave' está en myDic (que es diferente a myDict) –

+1

@MichelKeijzers: ¿De verdad crees que no es un error tipográfico? –

0

¿Se considera esto un chiste:

>>> d={1:2} 
>>> if 1 in d: del d[1] 
... 
>>> d 
{} 
+0

No. No lo haría. –

+0

no se preocupe, vaya con la opción pop (clave, Ninguno) luego. –

+2

No lo llamo una sola línea porque son dos líneas, simplemente metidas en una en una forma no permitida por [PEP 8] (http://www.python.org/dev/peps/pep-0008/). Otras dos razones por las que nunca lo haría de esta manera son (a) no es tan corto y bonito; (b) requiere mencionar el nombre del diccionario y la clave dos veces cada uno en vez de una vez. Los mismos argumentos se aplican con 'd [k] si k en d else v' contra' d.get (k, v) '. –

2

Además del método pop uno siempre puede explicitamente llamar al método __delitem__ - que hace lo mismo que del, pero se hace una s expresión en lugar de como una declaración. Dado que es una expresión, se puede combinar con la línea "si" (versión de Python del operador ternario C):

d = {1:2} 

d.__delitem__(1) if 1 in d else None 
Cuestiones relacionadas