python - une - Supprimer un élément d'un dictionnaire




supprimer un élément d'une liste python (9)

Appelez simplement del d ['key'].

Cependant, en production, il est toujours recommandé de vérifier si «clé» existe dans d.

if 'key' in d:
    del d['key']

Est-il possible de supprimer un élément d'un dictionnaire en Python?

Je sais que je peux juste appeler .pop sur le dictionnaire, mais cela renvoie l'élément qui a été supprimé. Ce que je cherche, c'est que quelque chose renvoie le dictionnaire moins l'élément en question.

À l'heure actuelle, j'ai une fonction d'aide qui accepte le dictionnaire en question en tant que paramètre, puis retourne un dictionnaire avec l'élément supprimé, Y at-il une solution plus élégante?


Ci-dessous l'extrait de code vous aidera certainement, j'ai ajouté des commentaires dans chaque ligne qui vous aidera à comprendre le code.

def execute():
   dic = {'a':1,'b':2}
   dic2 = remove_key_from_dict(dic, 'b')  
   print(dict2)           # {'a': 1}
   print(dict)            # {'a':1,'b':2}

def remove_key_from_dict(dictionary_to_use, key_to_delete):
   copy_of_dict = dict(dictionary_to_use)     # creating clone/copy of the dictionary
   if key_to_delete in copy_of_dict :         # checking given key is present in the dictionary
       del copy_of_dict [key_to_delete]       # deleting the key from the dictionary 
   return copy_of_dict                        # returning the final dictionary

ou vous pouvez aussi utiliser dict.pop ()

d = {"a": 1, "b": 2}

res = d.pop("c")  # No `KeyError` here
print (res)       # this line will not execute

ou la meilleure approche est

res = d.pop("c", "key not found")
print (res)   # key not found
print (d)     # {"a": 1, "b": 2}

res = d.pop("b", "key not found")
print (res)   # 2
print (d)     # {"a": 1}

Je pense que votre solution est la meilleure façon de le faire. Mais si vous voulez une autre solution, vous pouvez créer un nouveau dictionnaire en utilisant les clés du vieux dictionnaire sans inclure votre clé spécifiée, comme ceci:

>>> a
{0: 'zero', 1: 'one', 2: 'two', 3: 'three'}
>>> {i:a[i] for i in a if i!=0}
{1: 'one', 2: 'two', 3: 'three'}

L' instruction del supprime un élément:

del d[key]

Cependant, cela mute le dictionnaire existant de sorte que le contenu du dictionnaire change pour quelqu'un d'autre qui a une référence à la même instance. Pour retourner un nouveau dictionnaire, faites une copie du dictionnaire:

def removekey(d, key):
    r = dict(d)
    del r[key]
    return r

Le constructeur dict() effectue une copie superficielle . Pour faire une copie en profondeur, voir le module de copy .


Non, il n'y a pas d'autre moyen que

def dictMinus(dct, val):
   copy = dct.copy()
   del copy[val]
   return copy

Cependant, créer souvent des copies de dictionnaires légèrement modifiés n'est probablement pas une bonne idée car cela entraînera des demandes de mémoire relativement importantes. Il est généralement préférable d'enregistrer le vieux dictionnaire (si nécessaire), puis de le modifier.


Voici une approche de conception de haut niveau:

def eraseElement(d,k):
    if isinstance(d, dict):
        if k in d:
            d.pop(k)
            print(d)
        else:
            print("Cannot find matching key")
    else:
        print("Not able to delete")


exp = {'A':34, 'B':55, 'C':87}
eraseElement(exp, 'C')

Je passe le dictionnaire et la clé que je veux dans ma fonction, valide si c'est un dictionnaire et si la clé est correcte, et si les deux existent, enlève la valeur du dictionnaire et imprime les restes.

Sortie: {'B': 55, 'A': 34}

J'espère que cela pourra aider!


joli doublure pour vérifier si la clé est présente, la supprimer, retourner la valeur, ou par défaut:

ret_val = ('key' in body and body.pop('key')) or 5

pop mute le dictionnaire.

 >>>lol = {"hello":"gdbye"}
 >>>lol.pop("hello")
    'gdbye'
 >>> lol
     {}

Si vous voulez conserver l'original, vous pouvez simplement le copier.


d = {1: 2, '2': 3, 5: 7}
del d[5]
print 'd = ', d

Résultat: d = {1: 2, '2': 3}







dictionary