Um einen Wert aus einem Dictionary zu holen aber beim Fehlen des Schluessels einen Standardwert zurueck zu geben, benutz man die get()-Methode des Dictionarys.
>>> d = {}
>>> v1 = d.get('k1', False)
In Laufzeitkritischen Situation ist aber die Verwendung des 'in' Operators in Verbindung mit der bedingten Zuweisung (var = <true_val> if <condition> else <false_val>) zu empfehlen.
>>> d = {}
>>> v1 = d['k1'] if 'k1' in d else False
Diese Variante ist mehr als doppelt so schnell. Ein Grund dafuer ist, dass kein neuer Stackframe (wie beim Aufruf der Methode) initialisiert werden muss.
>>> from timeit import repeat
>>> # using in-operator, key exists
... repeat("v1 = d['k1'] if 'k1' in d else False","d = {'k1':1,'k2':2,'k3':3}")
[0.07450103759765625, 0.07420086860656738, 0.08083891868591309]
>>> # using in-operator, key does not exist
... repeat("v1 = d['k1'] if 'k1' in d else False","d = {'k2':2,'k3':3}")
[0.0692899227142334, 0.07552504539489746, 0.06921982765197754]
>>> # using get-method, key exists
... repeat("v1 = d.get('k1', False)","d = {'k1':1,'k2':2,'k3':3}")
[0.17818498611450195, 0.17094182968139648, 0.1709129810333252]
>>> # using get-method, key does not exist
... repeat("v1 = d.get('k1', False)","d = {'k2':2,'k3':3}")
[0.1866598129272461, 0.17163419723510742, 0.1735219955444336]
0 comments:
Post a Comment