Die Verwendung der Karte (halfdanrumps Antwort) ist für mich am besten, obwohl ich die Zeit nicht gemessen habe...
Aber wenn Sie sich für ein Wörterbuch entscheiden, und wenn Sie ein big_dict:
- Vergewissern Sie sich unbedingt, dass Sie die Anforderungen durchlaufen haben. Dies ist entscheidend und wirkt sich auf die Laufzeit des Algorithmus aus (Big O, Theta, usw.)
- Schreiben Sie sie allgemein genug, um Fehler zu vermeiden, wenn Schlüssel nicht vorhanden sind.
so z.B.:
big_dict = {'a':1,'b':2,'c':3,................................................}
req = ['a','c','w']
{k:big_dict.get(k,None) for k in req )
# or
{k:big_dict[k] for k in req if k in big_dict)
Beachten Sie, dass Sie im umgekehrten Fall, d. h. wenn req groß, my_dict aber klein ist, stattdessen eine Schleife über my_dict ziehen sollten.
Im Allgemeinen machen wir eine Kreuzung und die Komplexität des Problems ist O(min(len(dict)),min(len(req))) . Pythons eigene Umsetzung der Kreuzung berücksichtigt die Größe der beiden Mengen, so dass es optimal erscheint. Da sie in C und Teil der Kernbibliothek ist, ist sie außerdem wahrscheinlich schneller als die meisten nicht optimierten Python-Anweisungen. Daher ist eine Lösung, die ich in Betracht ziehen würde:
dict = {'a':1,'b':2,'c':3,................................................}
req = ['a','c','w',...................]
{k:dic[k] for k in set(req).intersection(dict.keys())}
Es verlagert die kritische Operation in den c-Code von Python und wird in allen Fällen funktionieren.