Angenommen, ich habe ein Wörterbuch, dessen Schlüssel Strings sind. Wie kann ich aus einem Wörterbuch, das nur die in einer Liste vorhandenen Schlüssel enthält, effizient ein neues Wörterbuch erstellen?Dictionary-Einträge effizient nach Schlüssel in Python
zum Beispiel:
# a dictionary mapping strings to stuff
mydict = {'quux': ...,
'bar': ...,
'foo': ...}
# list of keys to be selected from mydict
keys_to_select = ['foo', 'bar', ...]
Die Art und Weise kam ich mit ist:
filtered_mydict = [mydict[k] for k in mydict.keys() \
if k in keys_to_select]
aber ich denke, das ist sehr ineffizient ist, weil: (1) es erfordert, dass die Tasten mit den Tasten Aufzählen() (2) es erfordert jedes Mal, k in keys_to_select nachzuschlagen. Mindestens eine davon kann vermieden werden, würde ich denken. irgendwelche Ideen? Ich kann scipy/numpy auch benutzen, wenn es gebraucht wird.
Wenn „wenn k in myDict“ wie diese verwenden, wird Python eine has_key Typ-Lookup ausführen, oder hat sie die Schlüssel in eine Liste/iterable und Schleife über sie konvertieren? Wenn es das letztere ist, "wenn mydict.has_key (k)" könnte effizienter sein, nein? (Ich habe noch keine Dokumentation gefunden, um sie zu klären. Die Google-Fähigkeiten haben mich enttäuscht). – pycruft
Um meine eigene Frage zu beantworten, ist die Verwendung von "k in dict" identisch mit der Verwendung von "dict.has_key (k)" gemäß http://www.python.org/dev/peps/pep-0234/ – pycruft
@pycruft, yep , und, wie 'timeit' cqn bestätigen (' python -mtimeit -s'd = dict.fromkeys (Bereich (99)) '' 23 in d''etc), ist' in' tatsächlich ungefähr doppelt so schnell als 'has_key' (speichert jedes Mal ein named-attribute lookup, was ungefähr der gleiche Vorgang ist wie ein dict loolup). Es gibt keinen Grund mehr, 'has_key' zu verwenden und es wurde aus Python 3 entfernt. –