/ / Y a-t-il un autre moyen en python de supprimer une paire clé-valeur d'un dictionnaire autre que del key [valeur]? - python, dictionnaire

Existe-t-il un autre moyen en python de supprimer une paire clé-valeur d'un dictionnaire autre que del key [valeur]? - python, dictionnaire

J'ai une fonction qui fonctionne bien seule, maissoulève une erreur clé lorsque j'essaie de l'utiliser dans une autre fonction. Plutôt que d’essayer d’expliquer le contexte plus large, j’ai pensé qu’il serait plus facile de changer le del hand [lettre], qui est où l'erreur est déclenchée. Dans certains cas, je pourrais simplement changer de main [lettre] en main.get (lettre, aucun), mais je ne peux pas l'utiliser avec l'opérateur del, cela jettera une erreur. Des idées?

hand = {"r": 2, "a": 3, "p": 2, "e": 1, "t": 1, "u":1}
word = "rapture"

def update_hand(hand, word):
"""This function loops through letters, and if the letter is in the 
hand, it reduces the corresponding int value by one, until there is 
no longer that letter in the hand, then it deletes the key,value pair 
all together"""
letters = set(word)
for letter in letters:
if letter in hand.keys():
hand[letter] = hand[letter]-1
if hand[letter] <= 0:
del hand[letter]
return hand

Réponses:

5 pour la réponse № 1

Utilisation .popAinsi, dans le cas où la clé n’existe pas, elle ne génère aucune erreur lorsque vous utilisez une valeur par défaut, par exemple None:

hand.pop(letter, None)
#                  ^ pops None when the key letter does not exist

Puisque vous avez déjà un chèque pour l’existence de la même clé dans l’un de vos if conditions, vous pouvez simplement faire:

for letter in letters:
if letter in hand: # same as letter in hand.keys()
hand[letter] = hand[letter] - 1
if hand[letter] <= 0:
hand.pop(letter, None) # del hand[letter] should not throw errors in this case

0 pour la réponse № 2

Si votre fonction "fonctionne bien sur elle-même" mais augmente quand elle est appelée depuis une autre fonction ", la première chose à faire serait de le découvrir. Pourquoi vous avez un problème dans le second cas. Sinon, c’est un exemple canonique de programmation par accident - que nous savons tous ne jamais travailler à long terme.

Maintenant, il y a une cause évidente pour un KeyError dans le code de votre fonction, ce qui ne dépend pas de quoi que ce soit d'autre que les entrées de la fonction: vous essayez de supprimer une clé sans vérifier d'abord son existence (le if hand[letter] <= 0: déclaration). Essayez de passer un dict vide pour le hand param et vous saurez que votre fonction ne pas "fonctionne bien sur son propre".