Ich möchte ein Wörterbuch aus einer Liste von Wörterbüchern erstellen, wobei Listenelemente nach dem Wert eines Schlüssels gruppiert werden, beispielsweise:
%Vor%Bisher habe ich zwei Möglichkeiten gefunden, dies zu tun. Der erste iteriert einfach über die Liste, erstellt im dict für jeden Schlüsselwert Unterlisten und fügt Elemente, die diesen Schlüsseln entsprechen, an die Unterliste an:
%Vor% Und noch eine Verwendung von itertools.groupby
:
Ich frage mich, welche Alternative am effizientesten ist?
Gibt es einen pythisch / prägnanten oder besseren Weg, dies zu erreichen?
Stimmt es, dass Sie Ihre Eingabeliste mit dem Wert des Schlüssels 'a' der Listenelemente gruppieren wollen? Wenn ja, ist Ihr erster Ansatz die beste, eine kleine Verbesserung, verwenden Sie dict.setdefault
:
Wenn Sie mit effizient "zeiteffizient" meinen, ist es möglich, es mit dem Modul timeit
zu messen.
Zum Beispiel:
%Vor%Weitere Informationen finden Sie in den offiziellen Zeitdokumenten .
Der beste Ansatz ist der erste, den Sie erwähnt haben, und Sie können ihn sogar eleganter gestalten, indem Sie setdefault
wie oben von bernhard erwähnt. Die Komplexität dieses Ansatzes ist O (n), da wir einfach einmal über die Eingabe iterieren und für jedes Element eine Suche in das Ausgabediktat durchführen, das wir erstellen, um die passende Liste zu finden, die eine konstante Zeit benötigt (Lookup +) anhängen) für jeden Artikel. Die überlagerte Komplexität ist also O (n), was optimal ist.
Wenn Sie itertools.groupby verwenden, müssen Sie die Eingabe vorher sortieren (das ist O (n log n)).
Tags und Links python algorithm dictionary group-by