2012-02-21 1 views
9

Esiste un modo per eseguire una riga di seguito?Python del if nel dizionario in una riga

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

grazie

+2

La prima cosa da fare con queste domande: leggere la documentazione 'dict' del tutto. –

+0

@ user683111: dovresti accettare la risposta, se ha funzionato per te :) – avasal

+2

possibile duplicato di [Come rimuovere una chiave dal dizionario?] (Http://stackoverflow.com/questions/11277432/how-to-remove- a-key-from-dictionary) – strongMA

risposta

18

È possibile scrivere

myDict.pop(key, None) 
+0

grazie, esattamente quello che volevo – scruffyDog

+0

Dovrebbe solo rimuoverlo se 'chiave' è in myDic (che è diverso da myDict) –

+1

@MichelKeijzers: Pensi davvero che non sia un refuso? –

0

Volete chiamare questo un uno di linea:

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

No. Non lo farei. –

+0

non preoccuparti, vai con l'opzione pop (chiave, nessuna) quindi. –

+2

Non lo chiamo una riga perché sono due righe, solo una in una forma non consentita da [PEP 8] (http://www.python.org/dev/peps/pep-0008/). Altri due motivi per cui non lo farei mai in questo modo (a) non è così breve e carino; (b) richiede di menzionare il nome del dizionario e la chiave due volte ciascuno anziché una volta. Gli stessi argomenti si applicano con 'd [k] se k in d else v' contro' d.get (k, v) '. –

2

Oltre al metodo pop si può sempre esplicitamente chiamare il metodo __delitem__ - che fa lo stesso di del, ma viene fatto a espressione di s piuttosto che una dichiarazione. Poiché si tratta di un'espressione, può essere combinato con la linea "se" (la versione di Python del C operatore ternario):

d = {1:2} 

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