Um die Leistungssorgen des Fragestellers zu beantworten (für Suchvorgänge in dict
gegen set
), etwas überraschend, dict
Nachschlagen kann nur geringfügig schneller sein (in Python 2.5.1 auf meinem recht langsamen Laptop), wenn man beispielsweise annimmt, dass die Hälfte der Suchvorgänge fehlschlägt und die Hälfte erfolgreich ist. Hier ist, wie man über herauszufinden geht:
$ python -mtimeit -s'k=dict.fromkeys(range(99))' '5 in k and 112 in k'
1000000 loops, best of 3: 0.236 usec per loop
$ python -mtimeit -s'k=set(range(99))' '5 in k and 112 in k'
1000000 loops, best of 3: 0.265 usec per loop
jede Prüfung mehrmals durchführen, um zu überprüfen, ob sie wiederholbar ist. Wenn also diese 30 Nanosekunden oder weniger auf einem langsamen Laptop ein absolut entscheidender Engpass sind, kann es sich lohnen, sich für die obskuren dict.fromkeys
Lösung als die einfache, offensichtliche, lesbare und eindeutig richtige set
(ungewöhnlich - in Python hat die einfache und direkte Lösung fast immer auch Leistungsvorteile).
Natürlich muss man dies mit der eigenen Python-Version, der eigenen Maschine, den eigenen Daten und dem Verhältnis von erfolgreichen zu fehlgeschlagenen Tests überprüfen, et bestätigen, dass die Einsparung von 30 Nanosekunden (oder was auch immer) bei dieser Suche einen großen Unterschied ausmacht, wenn das Profil extrem genau erstellt wird.
Glücklicherweise wird sich dies in den allermeisten Fällen als völlig unnötig erweisen... aber da Programmierer wird sich mit sinnlosen Mikro-Optimierungen beschäftigen trotzdem Egal, wie oft man ihnen sagt, dass sie irrelevant sind, die timeit
Modul ist in der Standardbibliothek enthalten, um diese meist bedeutungslosen Mikro-Benchmarks kinderleicht zu machen;-)