it-swarm.com.de

Geben Sie None zurück, wenn der Dictionary-Schlüssel nicht verfügbar ist

Ich benötige eine Möglichkeit, einen Dictionary-Wert abzurufen, wenn sein Schlüssel vorhanden ist, oder einfach None zurückzugeben, wenn dies nicht der Fall ist.

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

414
Spyros

Sie können get() verwenden

value = d.get(key)

das gibt None zurück, wenn key is not in d. Sie können auch einen anderen Standardwert angeben, der anstelle von None zurückgegeben wird:

value = d.get(key, "empty")
692
Tim Pietzcker

Wundere dich nicht mehr. Es ist in die Sprache eingebaut.

 >>> help (dict) 
 
 Hilfe zum Klassendict in Modulen: 
 
 class dict (object) 
 | dict () -> neues leeres Wörterbuch 
 | dict (Zuordnung) -> neues Wörterbuch, das aus dem 
 | eines Zuordnungsobjekts initialisiert wurde (Schlüssel, Wert) Paare 
 ... 
 | 
 | get (...) 
 | D.get (k [ d]) -> D [k] wenn k in D, sonst d. d ist standardmäßig None. 
 | 
 ... 
62
John La Rooy

Verwenden Sie dict.get

23
Daenyth

Sie sollten die Methode get() aus der Klasse dict verwenden

d = {}
r = d.get( 'missing_key', None )

Dies führt zu r == None. Wenn der Schlüssel nicht im Wörterbuch gefunden wird, gibt die Funktion get das zweite Argument zurück.

18
dusktreader

Wenn Sie eine transparentere Lösung wünschen, können Sie dict in eine Unterklasse einteilen, um das folgende Verhalten zu erzielen:

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
17
Björn Pollex

Normalerweise benutze ich ein defaultdict für Situationen wie diese. Sie geben eine Factory-Methode an, die keine Argumente akzeptiert und einen Wert erstellt, wenn ein neuer Schlüssel angezeigt wird. Dies ist nützlicher, wenn Sie eine leere Liste mit neuen Schlüsseln zurückgeben möchten ( siehe Beispiele ).

from collections import defaultdict
d = defaultdict(lambda: None)
print d['new_key']  # prints 'None'
10
job

Sie können die get() -Methode eines dict -Objekts verwenden, wie bereits von anderen vorgeschlagen. Abhängig davon, was Sie gerade tun, können Sie auch eine try/except Suite wie diese verwenden:

try:
   <to do something with d[key]>
except KeyError:
   <deal with it not being there>

Dies wird als ein sehr "pythonischer" Ansatz zur Behandlung des Falls angesehen.

8
martineau

Eine einzeilige Lösung wäre:

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

Dies ist nützlich, wenn Sie versuchen, Wörterbuchwerte zu einer neuen Liste hinzuzufügen und eine Standardeinstellung festlegen möchten:

z.B.

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

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

Sie können aber auch Folgendes tun, um nach einem Schlüssel zu suchen:

d = {}
if 'keyname' in d:

    # d['keyname'] exists
    pass

else:

    # d['keyname'] does not exist
    pass
4
Marek P