[PYTHON] 4 Möglichkeiten, mit fehlenden Diktatschlüsseln umzugehen

Effektive Python 2nd Edition-90-Elemente zur Verbesserung des Python-Programms ist wirklich wunderbar, also lese ich es beim Weinen.

Es gab einen Artikel darüber, wie man mit dem fehlenden Diktatschlüssel umgeht, daher möchte ich, dass Sie dieses Buch für Details lesen, aber ich habe es gemessen, weil ich mir Sorgen über die Verarbeitungszeit jedes einzelnen gemacht habe.

Diesmal ist es ziemlich einfach, aber ich werde einen Prozess schreiben, um die Zeichen zu zählen, die in einer bestimmten Zeichenfolge erscheinen. Die Ausführungsumgebung ist die Standardeinstellung für Google Colab.

Importieren Sie zunächst die erforderlichen Bibliotheken.

import time, defaultdict

Richten Sie eine geeignete Zeichenfolge für die Aggregation aus.

target = 'super_string_of_my_passages. but this does not make sense at all. because this is nothing'

Schließlich wird der nach der Anzahl der Vorkommen sortierte Schlüsselwert ausgegeben, und das erwartete Ergebnis ist wie folgt.

[('s', 13),
 (' ', 12),
 ('e', 8),
 ('t', 7),
 ('a', 6),
 ('i', 5),
 ('n', 5),
 ('_', 4),
 ('o', 4),
 ('u', 3),
 ('g', 3),
 ('h', 3),
 ('p', 2),
 ('r', 2),
 ('m', 2),
 ('.', 2),
 ('b', 2),
 ('l', 2),
 ('f', 1),
 ('y', 1),
 ('d', 1),
 ('k', 1),
 ('c', 1)]

When in wird in der if-Anweisung verwendet

Die if-Anweisung prüft, ob der Schlüssel vorhanden ist, und gibt dem fehlenden Schlüssel einen Anfangswert, indem ein in-Ausdruck verwendet wird, der True zurückgibt. Wahrscheinlich der erste einfache Weg, um darauf zu kommen.

%%time
ranking = {}
for key in target:
    if key in ranking.keys():
        count = ranking[key]
    else:
        count = 0
    ranking[key] = count + 1
sorted(ranking.items(), key=lambda x: x[1], reverse=True)

CPU times: user 45 µs, sys: 9 µs, total: 54 µs Wall time: 56.3 µs

Bei Verwendung von KeyError in der try-Anweisung

Verwenden Sie die try-Except-Anweisung, um den KeyError, der die Fehlerursache verursacht, als erwarteten Fehler zu behandeln.

%%time
ranking = {}
for key in target:
    try:
        count = ranking[key]
    except KeyError:
        count = 0
    ranking[key] = count + 1
sorted(ranking.items(), key=lambda x: x[1], reverse=True)   

CPU times: user 59 µs, sys: 11 µs, total: 70 µs Wall time: 78.2 µs

Bei Verwendung der get-Methode

Verwenden Sie die get-Methode des integrierten Diktats.

%%time
ranking = {}
for key in target:
    count = ranking.get(key, 0)
    ranking[key] = count + 1
sorted(ranking.items(), key=lambda x: x[1], reverse=True)   

CPU times: user 43 µs, sys: 8 µs, total: 51 µs Wall time: 53.6 µs

Bei Verwendung von defaultdict

%%time
ranking = defaultdict(int)

for s in target:
    ranking[s] += 1
sorted(ranking.items(), key=lambda x: x[1], reverse=True)

CPU times: user 36 µs, sys: 8 µs, total: 44 µs  Wall time: 47.2 µs

Fazit

Das Standarddiktat kann gut sein! (* ^^)

Sonderedition

Das ist alles für die in diesem Buch behandelten Methoden. Hey, wenn du diese Art der Verarbeitung machst, kannst du ihn benutzen! Kannst du es nicht vergessen? Ich werde es als zusätzliche Ausgabe schreiben, weil es hineingestoßen zu sein scheint. In einem so einfachen Fall können Sie die Counter-Klasse der Sammlungsbibliothek verwenden. Es ist praktisch, die Anzahl der Vorkommen in jedem Element zu zählen. Da es eine most_common-Methode gibt, die nach der Nummer sortiert, verwenden Sie sie.

from collections import Counter

%%time
ranking = Counter(target)
ranking.most_common()

CPU times: user 53 µs, sys: 0 ns, total: 53 µs Wall time: 56.5 µs

Vielen Dank!

Recommended Posts

4 Möglichkeiten, mit fehlenden Diktatschlüsseln umzugehen
2 Möglichkeiten, mit SessionNotCreatedException umzugehen
Umgang mit unausgeglichenen Daten
Umgang mit Enum-Kompatibilitätsfehlern
Verschiedene Möglichkeiten, Ressourcen mit Umfang zu zerstören
Umgang mit Speicherlecks in matplotlib.pyplot
Umgang mit Fehlern beim Auftreffen auf pip pip
Ich kann nicht nerven. Wie man mit nervigen Objekten umgeht
Der Umgang mit dem Modul'tensorflow 'hat kein Attribut' '
Methode zum Abrufen aller Schlüssel des verschachtelten Diktats
Problemumgehung für Djangos Vorlage existiert nicht
Umgang mit Pyenv-Initialisierungsfehlern bei Fischen 3.1.0
[Python] Umgang mit Pandas read_html Lesefehler
Vorgehensweise beim Ausführen von Transaktionen: In Anaconda fehlgeschlagen
Dikt in Array konvertieren
[AWS] Umgang mit dem Fehler "Ungültiger Codepunkt" in CloudSearch
Für Anfänger, wie man mit häufigen Fehlern in Keras umgeht
Umgang mit UnicodeDecodeError beim Ausführen des Downloads von Google-Bildern