Comment supprimer une clé d'un dictionnaire Python?
en essayant de supprimer une clé d'un dictionnaire, j'écris:
if 'key' in myDict:
del myDict['key']
y a-t-il une seule façon de faire cela?
8 réponses
Utilisation dict.pop()
:
my_dict.pop('key', None)
cela retournera my_dict[key]
si key
existe dans le dictionnaire, et None
autrement. Si le second paramètre n'est pas spécifié (ie. my_dict.pop('key')
) et key
n'existe pas, un KeyError
est déclenché.
Spécifiquement pour répondre à "est-il une ligne de chemin de faire cela?"
if 'key' in myDict: del myDict['key']
...Eh bien, vous demandé ; -)
vous devriez considérer, cependant, que cette façon de supprimer un objet d'un dict
est pas atomique -il est possible que 'key'
peut être dans myDict
pendant la déclaration if
, mais peut être supprimé avant del
est exécuté, dans ce cas del
échouera avec un KeyError
. Compte tenu de cela, il serait plus sûr de utiliser dict.pop
ou quelque chose du genre
try:
del myDict['key']
except KeyError:
pass
qui, bien sûr, est certainement et non un one-liner.
il m'a fallu un certain temps pour comprendre ce que fait exactement my_dict.pop("key", None)
. Je vais donc ajouter ceci comme réponse pour sauver d'autres googling time:
pop(touche [par défaut])
si la clé est dans le dictionnaire, retirez-la et retournez sa valeur, sinon retour par défaut. Si le défaut n'est pas donné et la clé n'est pas dans le dictionnaire, un KeyError est soulevée
des trois solutions décrites ci-dessus.
Petit Dictionnaire:
>>> import timeit
>>> timeit.timeit("d={'a':1}; d.pop('a')")
0.23399464370632472
>>> timeit.timeit("d={'a':1}; del d['a']")
0.15225347193388927
>>> timeit.timeit("d={'a':1}; d2 = {key: val for key, val in d.items() if key != 'a'}")
0.5365207354998063
plus grand dictionnaire:
>>> timeit.timeit("d={nr: nr for nr in range(100)}; d.pop(3)")
5.478138627299643
>>> timeit.timeit("d={nr: nr for nr in range(100)}; del d[3]")
5.362219126590048
>>> timeit.timeit("d={nr: nr for nr in range(100)}; d2 = {key: val for key, val in d.items() if key != 3}")
13.93129749387532
si vous avez besoin de supprimer beaucoup de clés d'un dictionnaire dans une ligne de code, je pense que l'utilisation de map() est tout à fait succinct et Pythonic lisible:
myDict = {'a':1,'b':2,'c':3,'d':4}
map(myDict.pop, ['a','c']) # The list of keys to remove
>>> myDict
{'b': 2, 'd': 4}
et si vous avez besoin d'attraper des erreurs où vous pop une valeur qui n'est pas dans le dictionnaire, utilisez lambda inside map () comme ceci:
map(lambda x: myDict.pop(x,None), ['a','c','e'])
[1, 3, None] # pop returns
>>> myDict
{'b': 2, 'd': 4}
ça marche. Et 'e' n'a pas causé d'erreur, même si myDict n'avait pas de clé 'e'.
utiliser:
>>> if myDict.get(key): myDict.pop(key)
une Autre façon:
>>> {k:v for k, v in myDict.items() if k != 'key'}
vous pouvez supprimer par conditions. Aucune erreur si key
n'existe pas.
nous pouvons supprimer une clé d'un dictionnaire Python par les quelques approches suivantes.
utilisant le mot-clé del
; c'est presque la même approche que vous l'avez fait -
myDict = {'one': 100, 'two': 200, 'three': 300 }
print(myDict) # {'one': 100, 'two': 200, 'three': 300}
if myDict.get('one') : del myDict['one']
print(myDict) # {'two': 200, 'three': 300}
ou
on peut faire comme suit:
mais il faut garder à l'esprit que, dans ce processus en fait il ne sera pas supprimer toute clé du dictionnaire plutôt que de faire la clé spécifique excluait de ce dictionnaire. De plus, j'ai observé qu'il retournait un dictionnaire qui n'était pas commandé de la même façon que myDict
.
myDict = {'one': 100, 'two': 200, 'three': 300, 'four': 400, 'five': 500}
{key:value for key, value in myDict.items() if key != 'one'}
si nous l'exécutons dans le shell, il exécutera quelque chose comme {'five': 500, 'four': 400, 'three': 300, 'two': 200}
- notez que ce n'est pas le même ordre que myDict
. Encore une fois si nous essayons d'imprimer myDict
, alors nous pouvons voir toutes les clés dont nous avons exclu du dictionnaire par cette approche. Cependant, nous pouvons faire un nouveau dictionnaire en assignant l'énoncé suivant dans une variable:
var = {key:value for key, value in myDict.items() if key != 'one'}
maintenant si nous essayons de l'imprimer, alors il suivra l'ordre parent:
print(var) # {'two': 200, 'three': 300, 'four': 400, 'five': 500}
ou
utilisant la méthode pop()
.
myDict = {'one': 100, 'two': 200, 'three': 300}
print(myDict)
if myDict.get('one') : myDict.pop('one')
print(myDict) # {'two': 200, 'three': 300}
la différence entre del
et pop
est que, en utilisant la méthode pop()
, nous pouvons réellement stocker la valeur de la clé si nécessaire, comme le suivant:
myDict = {'one': 100, 'two': 200, 'three': 300}
if myDict.get('one') : var = myDict.pop('one')
print(myDict) # {'two': 200, 'three': 300}
print(var) # 100