776 Stimmen

Geben Sie einen Standardwert zurück, wenn ein Wörterbuchschlüssel nicht verfügbar ist

Ich brauche eine Möglichkeit, den Wert eines Wörterbuchs abzurufen, wenn sein Schlüssel vorhanden ist, oder einfach None zurückzugeben, wenn er nicht vorhanden ist.

Python wirft jedoch eine KeyError-Ausnahme, wenn Sie nach einem nicht vorhandenen Schlüssel suchen. Ich weiß, dass ich nach dem Schlüssel suchen kann, aber ich suche nach etwas expliziterem. Gibt es eine Möglichkeit, einfach None zurückzugeben, wenn der Schlüssel nicht vorhanden ist?


<strong>Siehe auch:</strong> <a href="https://stackoverflow.com/q/11041405">Warum dict.get(key) anstelle von dict[key]?</a>

1voto

FastGTR Punkte 323

Ich war beeindruckt von dem, was in python2 vs python3 möglich war. Ich werde basierend auf dem antworten, was ich letztendlich für python3 gemacht habe. Mein Ziel war einfach: Überprüfen, ob eine JSON-Antwort im Dictionary-Format einen Fehler enthält oder nicht. Mein Dictionary heißt "token" und der Schlüssel, den ich suche, ist "error". Ich suche nach dem Schlüssel "error" und wenn er nicht vorhanden war, setze ich ihn auf den Wert None und überprüfe dann, ob der Wert None ist. Wenn ja, fahre ich mit meinem Code fort. Ein else-Statement würde behandeln, wenn ich den Schlüssel "error" habe.

if ((token.get('error', None)) is None):
    etwas tun

0voto

Thickycat Punkte 368

Wenn Sie eine komplexere Anforderung haben, die einem Cache entspricht, könnte diese Klasse nützlich sein:

class Cache(dict):
    """ Bietet einen auf einem Dictionary basierenden Cache

        Übergeben Sie eine Funktion an den Konstruktor, die einen Schlüssel akzeptiert und einen Wert zurückgibt.
        Diese Funktion wird genau einmal für jeden Schlüssel aufgerufen, der vom Cache benötigt wird.
    """

    def __init__(self, fn):
        super()
        self._fn = fn

    def __getitem__(self, key):
        try:
            return super().__getitem__(key)
        except KeyError:
            value = self[key] = self._fn(key)
            return value

Der Konstruktor nimmt eine Funktion entgegen, die mit dem Schlüssel aufgerufen wird und den Wert für das Dictionary zurückgeben soll. Dieser Wert wird dann gespeichert und beim nächsten Mal aus dem Dictionary abgerufen. Verwenden Sie es so...

def get_from_database(name):
    # Führen Sie teure Operationen durch, um den Wert von irgendwo abzurufen
    return value

answer = Cache(get_from_database)
x = answer(42)   # Ruft den Wert aus der Datenbank ab
x = answer(42)   # Ruft den Wert direkt aus dem Dictionary ab

-1voto

Aditya Punkte 11
  1. d1={"One":1,"Two":2,"Three":3}

  2. d1.get("Four")

Wenn Sie diesen Code ausführen, wird es keinen 'Keyerror' geben, was bedeutet, dass Sie 'dict.get()' verwenden können, um Fehler zu vermeiden und Ihren Code auszuführen

-2voto

Varmilo Punkte 21

Sie können den try-except-Block verwenden

try:
    value = dict['keyname']

except IndexError:
    value = None

-6voto

Evhz Punkte 8080

Wenn Sie es mit False tun können, gibt es auch die integrierte Funktion hasattr:

e=dict()
hasattr(e, 'message'):
>>> False

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X