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>

25voto

Björn Pollex Punkte 72424

Wenn Sie eine transparentere Lösung wünschen, können Sie dict untergeordnet machen, um dieses Verhalten zu erhalten:

class NoneDict(dict):
    def __getitem__(self, key):
        return dict.get(self, key)

>>> foo = NoneDict([(1,"asdf"), (2,"qwerty")])
>>> foo[1]
'asdf'
>>> foo[2]
'qwerty'
>>> foo[3] is None
True

13voto

imapotatoe123 Punkte 557

Eine Lösung in einer Zeile wäre:

item['key'] if 'key' in item else None

Dies ist nützlich, wenn versucht wird, Werte aus einem Wörterbuch zu einer neuen Liste hinzuzufügen und einen Standardwert bereitzustellen:

Zum Beispiel:

row = [item['key'] if 'key' in item else 'default_value']

12voto

Marek P Punkte 415

Wie bereits von anderen oben erwähnt, können Sie get() verwenden.

Aber um auf einen Schlüssel zu überprüfen, können Sie auch Folgendes tun:

d = {}
if 'keyname' in d:

    # d['keyname'] existiert
    pass

else:

    # d['keyname'] existiert nicht
    pass

10voto

martineau Punkte 110783

Sie könnten die get()-Methode eines dict-Objekts verwenden, wie es andere bereits vorgeschlagen haben. Alternativ, je nachdem, was genau Sie tun, könnten Sie eine try/except-Suite wie diese verwenden:

try:

except KeyError:

Dies wird als sehr "Pythonic" angesehen, um mit dem Fall umzugehen.

4voto

eaydin Punkte 928

Für diejenigen, die die dict.get-Technik für verschachtelte Wörterbücher verwenden, anstatt für jede Ebene des Wörterbuchs explizit zu überprüfen oder die dict-Klasse zu erweitern, können Sie den Standardrückgabewert auf ein leeres Wörterbuch setzen, außer für die äußerste Ebene. Hier ist ein Beispiel:

my_dict = {'level_1': {
             'level_2': {
                  'level_3': 'more_data'
                  }
              }
           }
result = my_dict.get('level_1', {}).get('level_2', {}).get('level_3')
# result -> 'more_data'
none_result = my_dict.get('level_1', {}).get('what_level', {}).get('level_3')
# none_result -> None

WARNUNG: Bitte beachten Sie, dass diese Technik nur funktioniert, wenn der erwartete Wert des Schlüssels ein Wörterbuch ist. Wenn der Schlüssel what_level im Wörterbuch existierte, aber sein Wert ein String oder Integer usw. war, hätte es einen AttributeError ausgelöst.

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