Python: Gruppiert Elemente in einem Diktat

8

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 :

%Vor%

Ich frage mich, welche Alternative am effizientesten ist?

Gibt es einen pythisch / prägnanten oder besseren Weg, dies zu erreichen?

    
Erwan Queffélec 26.06.2015, 11:19
quelle

4 Antworten

8

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 :

%Vor%     
Bernhard 26.06.2015, 11:25
quelle
3

Ein Einliner -

%Vor%     
Anand S Kumar 26.06.2015 11:32
quelle
2

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 .

    
ewilazarus 26.06.2015 18:11
quelle
1

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)).

    
gen-y-s 26.06.2015 13:56
quelle