Ich dachte, es wäre interessant, aufzuzeigen, welche Methoden am schnellsten sind und in welchem Szenario:
Hier sind einige Tests, die ich durchgeführt habe (auf einem 2012 MacBook Pro)
def method1(dict, search_age):
for name, age in dict.iteritems():
if age == search_age:
return name
def method2(dict, search_age):
return [name for name,age in dict.iteritems() if age == search_age]
def method3(dict, search_age):
return dict.keys()[dict.values().index(search_age)]
Ergebnisse aus profile.run()
für jede Methode 100.000 Mal:
Methode 1:
>>> profile.run("for i in range(0,100000): method1(dict, 16)")
200004 function calls in 1.173 seconds
Methode 2:
>>> profile.run("for i in range(0,100000): method2(dict, 16)")
200004 function calls in 1.222 seconds
Methode 3:
>>> profile.run("for i in range(0,100000): method3(dict, 16)")
400004 function calls in 2.125 seconds
Dies zeigt, dass für ein kleines Diktat die Methode 1 am schnellsten ist. Dies liegt höchstwahrscheinlich daran, dass sie die erste Übereinstimmung zurückgibt, im Gegensatz zu allen Übereinstimmungen wie Methode 2 (siehe Anmerkung unten).
Interessanterweise erhalte ich bei der Durchführung der gleichen Tests mit einem Diktat mit 2700 Einträgen ganz andere Ergebnisse (diesmal 10.000 Mal ausgeführt):
Methode 1:
>>> profile.run("for i in range(0,10000): method1(UIC_CRS,'7088380')")
20004 function calls in 2.928 seconds
Methode 2:
>>> profile.run("for i in range(0,10000): method2(UIC_CRS,'7088380')")
20004 function calls in 3.872 seconds
Methode 3:
>>> profile.run("for i in range(0,10000): method3(UIC_CRS,'7088380')")
40004 function calls in 1.176 seconds
Methode 3 ist also viel schneller. Das zeigt, dass die Größe Ihres Diktats Einfluss darauf hat, welche Methode Sie wählen.
Notas:
- Methode 2 liefert eine Liste von alle Namen, während die Methoden 1 und 3 nur die erste Übereinstimmung zurückgeben.
- Ich habe die Speichernutzung nicht berücksichtigt. Ich bin nicht sicher, ob Methode 3 2 zusätzliche Listen erstellt (
keys()
y values()
) und speichert sie im Speicher.
0 Stimmen
Verwandt: Umkehrung / Invertierung einer Wörterbuchzuordnung
1 Stimmen
Würden Sie ein Wort anhand seiner Definition in einem Wörterbuch finden? NEIN.
0 Stimmen
Sie können eine verschlossene Tür nicht öffnen. (Es sei denn, man bricht sie auf.)