/ / Gibt es in Python eine andere Möglichkeit, ein Schlüssel-Wert-Paar aus einem anderen Wörterbuch als del key [value] zu entfernen? - Python, Wörterbuch

Gibt es in Python eine andere Möglichkeit, einen Schlüssel, ein Wertepaar, aus einem Wörterbuch außer del key [value] zu entfernen? - Python, Wörterbuch

Ich habe eine Funktion, die von sich aus gut funktioniert, aberlöst einen Schlüsselfehler aus, wenn ich versuche, ihn in einer anderen Funktion zu verwenden. Anstatt zu versuchen, den größeren Kontext zu erklären, dachte ich, es wäre einfacher, einfach den zu ändern del hand [Brief]Hier wird der Fehler ausgelöst. In einigen Fällen könnte ich einfach hand [letter] in hand.get (letter, None) ändern, aber ich kann dies nicht mit dem del-Operator verwenden, es wird ein Fehler ausgegeben. Irgendwelche Ideen?

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

Antworten:

5 für die Antwort № 1

Benutzen .popWenn der Schlüssel also nicht vorhanden ist, wird kein Fehler ausgegeben, wenn Sie beispielsweise eine Standardeinstellung verwenden None:

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

Da Sie bereits eine Überprüfung auf das Vorhandensein desselben Schlüssels in einem Ihrer Schlüssel haben if Bedingungen können Sie einfach tun:

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 für die Antwort № 2

Wenn Ihre Funktion von sich aus "gut funktioniert", aber beim Aufruf von einer anderen Funktion ausgelöst wird, ist es das allererste, was Sie tun müssen, um dies herauszufinden Warum Sie haben ein Problem im zweiten Fall. Sonst ist es ein kanonisches Beispiel für zufällige Programmierung - von denen wir alle wissen, dass sie langfristig nie funktionieren.

Jetzt gibt es einen offensichtlichen Grund für a KeyError im Code Ihrer Funktion, was nicht von irgendetwas anderem abhängt, was die Funktion eingibt: Sie versuchen, einen Schlüssel zu löschen, ohne vorher zu überprüfen, ob er existiert (das if hand[letter] <= 0: Aussage). Übergeben Sie ein leeres Diktat für die hand param und Sie werden herausfinden, welche Funktion dies tut nicht "funktioniert gut für sich".