Sortierung von Wörterbüchern nach größten Werten: Klassenmethode

Ich möchte ein bestimmtes Wörterbuch sortieren und eine Liste der Top_n Anzahl der Vorkommnisse zurückgeben. Das Wörterbuch ist eine Sammlung von Wörtern aus einem txt-Dokument, wobei der 'Schlüssel' ein einziges Wort aus der txt-Datei ist und der 'Wert' die Anzahl der Vorkommen im Dokument ist.

Ich habe die init- Methode wie folgt:

def __init__(self:'Collection_of_words', file_name: str) -> None: ''' this initializer will read in the words from the file, and store them in self.counts''' l_words = open(file_name).read().split() s_words = set(l_words) self.counts = dict([ [word, l_words.count(word)] for word in s_words]) 

Nun, eine meiner Instanz Methoden wird eine Liste der Strings der 'Top n' Anzahl der Vorkommnisse givin einige int Argument zurückgeben. Ich habe es geschossen:

 def top_n_words(self, i): '''takes one additional parameter, an int, <i> which is the top number of occurences. Returns a list of the top <i> words.''' return [ pair[0] for pair in sorted(associations, key=lambda pair: pair[1], reverse=True)[:5]] 

Allerdings, wenn ich diesen Code ausführen bekomme ich Fehler und kann nicht herausfinden, warum. Ich bin mir nicht sicher, wie man Wörterbuchobjekte sortiert (zB self.counts)

  • Überprüfen Sie, ob das Python-Wörterbuch Wert enthält und wenn so Rückgabe-bezogener Wert ist
  • Python Generieren Sie ein dynamisches Wörterbuch aus der Liste der Schlüssel
  • Python-Wörterbuchreferenz auf Nachbar-Wörterbuch-Element
  • Python: Suchen eines (String) -Taste in einem Wörterbuch, das einen Teilstring enthält
  • Liste der Wörterbücher nach Datum in Python 3.4 [duplizieren]
  • Wie drucke ich die Schlüssel-Wert-Paare eines Wörterbuchs in Python
  • Python argparse dict arg
  • Was ist der beste Weg, um austauschbare Tupel-Tasten für den gleichen Wörterbuch-Wert zu erstellen?
  • 2 Solutions collect form web for “Sortierung von Wörterbüchern nach größten Werten: Klassenmethode”

     sorted(self.counts, key=lambda pair: pair[1], reverse=True) 

    Iterating over self.counts gibt die Schlüssel, nicht Schlüssel-Wert-Paare. Das bedeutet, dass das pair[1] nicht funktioniert. Sie wollen key=self.counts.get .

    Wenn Ihre Liste sowohl Zählungen als auch Schlüssel enthalten muss, müssen Sie stattdessen die Schlüsselwertpaare nach Werten sortieren:

     sorted(self.counts.items(), key=operator.itemgetter(1), reverse=True) 

    Beachten Sie auch, dass collections.Counter bereits tut, was Sie brauchen, und mit einem Zähl-Algorithmus in linearer Zeit statt quadratisch.

    Ich habe dies durch die Schaffung von variablen 'Assoziationen' mit dict_items gelöst. Ex:

     associations = self.counts.items() >>> associations >>>dict_items([('would,', 1), ('Even', 1), ('Cries', 1), ('Sings', 5)]) 

    Ich habe diese Variable dann in einem Listenverständnis verwendet. Ich habe Assoziationen in absteigender Reihenfolge (größte bis kleinste) durch die Schaffung einer Lambda-Funktion und Indizierung der zweiten Element in das Paar. Das Wort mit der größten Anzahl von Vorkommnissen wird im Index [0] in der Liste sein.

     def top_n_words(self, i): associations = self.counts.items() return [ pair[0] for pair in sorted(associations, key=lambda pair: pair[1], reverse=True)[:i]] 
    Python ist die beste Programmiersprache der Welt.