Ich wollte testen, ob ein Schlüssel in einem Wörterbuch vorhanden ist, bevor ich den Wert für den Schlüssel aktualisiere. Ich habe den folgenden Code geschrieben:
if 'key1' in dict.keys():
print "blah"
else:
print "boo"
Ich denke, dass dies nicht der beste Weg ist, um diese Aufgabe zu bewältigen. Gibt es eine bessere Möglichkeit, nach einem Schlüssel im Wörterbuch zu suchen?
31 Stimmen
Aufruf von
dict.keys()
erstellt eine Liste von Schlüsseln, entsprechend der Dokumentation docs.python.org/2/library/stdtypes.html#dict.keys aber es würde mich überraschen, wenn dieses Muster in einer seriösen Implementierung nicht so optimiert wäre, dass es sich inif 'key1' in dict:
.7 Stimmen
So habe ich endlich herausgefunden, warum viele meiner Python-Skripte so langsam waren :) :(. Das liegt daran, dass ich seit Jahren
x in dict.keys()
um nach Schlüsseln zu suchen. Und das geschah, weil die übliche Art, in Java über Schlüssel zu iterieren, istfor (Type k : dict.keySet())
diese Gewohnheit verursachtfor k in dict.keys()
sich natürlicher anfühlen alsfor k in dict
(was in Bezug auf die Leistung immer noch in Ordnung sein sollte?), aber dann wird die Überprüfung der Schlüssel zuif k in dict.keys()
auch, was ein Problem ist...4 Stimmen
@EvgeniSergeev
if k in dict_:
prüft auf das Vorhandensein von k in den KEYS von dict_, so dass Sie immer noch nicht brauchendict_.keys()
. (Das hat mich gestört, denn es liest sich für mich wie ein Test für ein Wert in dict. Ist es aber nicht.)1 Stimmen
@ToolmakerSteve Das stimmt, aber das ist nicht nur unnötig, sondern auch keine gute Praxis.
26 Stimmen
Versuchen Sie "Diktat eintippen".