Wie erstellt man einen Txt-Frequenzzähler mit allen Buchstaben (a-z) in Python 3

7

Ich habe eine Textdatei namens textf, die ungefähr so ​​aussieht:

%Vor%

Ich möchte eine Häufigkeitszählung für jeden Buchstaben in der Textdatei machen, aber ich möchte es mit der Bedingung, dass, wenn ein Buchstabe nicht im Text erscheint, er einen Schlüssel haben sollte: Wert-Paar mit Wert 0. Zum Beispiel wenn z war nicht im Text sollte es so etwas wie 'z' aussehen: 0 usw. für alle Buchstaben (a bis z). Ich habe den folgenden Code gemacht:

%Vor%

Aber die Ausgabe sieht ungefähr so ​​aus:

%Vor%

Ich versuche es so zu machen, dass die Leerzeichenanzahl ' ': 110 nicht angezeigt wird und dass ich alle Buchstaben (az) habe und wenn der Buchstabe nicht im Text erscheint, dass mein Ergebnis etwas wie 'n': 0 und bald. Irgendwelche Ideen oder Vorschläge, wie ich das möglich machen könnte?

    
adda.fuentes 03.10.2017, 15:51
quelle

6 Antworten

8

Eine Möglichkeit, dies zu tun, besteht darin, aus Ihrem Counter ein normales Diktat zu machen, indem Sie die Kleinbuchstaben als Tasten des neuen Diktats verwenden. Wir verwenden die Methode dict.get , um einen Standardwert von Null für fehlende Buchstaben anzugeben.

%Vor%

Ausgabe

%Vor%

Wenn Sie dies in Python 3.6+ tun, erhalten Sie den Nebeneffekt, dass das neue dict alphabetisch sortiert ist (obwohl dieses Verhalten derzeit nur ein Implementierungsdetail ist, auf das man sich nicht verlassen sollte).

Wie Benutzer2357112 in den Kommentaren erwähnt, müssen wir letter_count.get(k, 0) nicht verwenden, da ein Counter automatisch Null zurückgibt, wenn wir versuchen, den Wert eines nicht vorhandenen Schlüssels zu lesen. Damit kann das Diktatverstehen in

geändert werden %Vor%     
PM 2Ring 03.10.2017, 16:06
quelle
8

Sie können das so machen:

%Vor%

Sie können die for-Schleife auch durch ein Wörterbuch-Verständnis ersetzen ( obwohl für ineffizient ist) wir versuchen zu tun, da es count verwendet - aber hinzugefügt als Weg nur als Referenz ):

%Vor%

Dies wird als Ergebnis geben:

%Vor%     
coder 03.10.2017 15:58
quelle
6

Sie können Ihre Counter() mit einem Wörterbuch initialisieren. In diesem Fall wird ein Wörterbuchverständnis verwendet, um alle Kleinbuchstaben auf Null zu initialisieren.

Die Verwendung von update() mit letter fügt dann zu diesen bestehenden Werten hinzu:

%Vor%

Ihnen geben:

%Vor%

Um den Raum loszuwerden, fügen Sie ihn der Interpunktionszeichenfolge hinzu.

    
Martin Evans 03.10.2017 15:56
quelle
1
  

... dass mein Ergebnis etwas wie ...

druckt

Die anderen Antworten konzentrieren sich auf die Auswahl einer anderen Datenstruktur, aber für mich klingt es so, als ob Sie bereits die richtige Datenstruktur, Counter , gewählt haben und das Ergebnis einfach anzeigen möchten. So etwas wie das würde tun:

%Vor%     
Arthur Tacca 03.10.2017 20:27
quelle
1

Wie wäre es mit

? %Vor%     
Daniele Bacarella 03.10.2017 16:08
quelle
1

Sie können dict.fromkeys verwenden, um das Wörterbuch mit dem Standardwert 0 für fehlende Buchstaben zu initialisieren. Und dann aktualisiere dieses Wörterbuch:

%Vor%

Ausgabe:

%Vor%     
Delimitry 03.10.2017 16:14
quelle

Tags und Links