Wie Wörterbuch in Python zu tun

Alle Typen der Verbindung Daten, die wir bisher im Detail studiert haben - Strings, Listen und Tupeln - sind Sequenztypen, die ganzen Zahlen als Indizes verwenden, um die Werte, die sie in ihnen enthalten zuzugreifen.







Wörterbücher sind noch eine andere Art von Verbindung Typ. Sie sind Pythons integrierte Mapping-Typ. Sie bilden Tasten. die jeder unveränderlichen Typ sein kann, auf Werte, die jede Art sein kann (heterogen), ebenso wie die Elemente einer Liste oder Tupels. In anderen Sprachen werden sie assoziative Arrays genannt, da sie einen Schlüssel mit einem Wert zuordnen.

Als Beispiel werden wir ein Wörterbuch zu übersetzen englische Worte in Spanisch erstellen. Für dieses Wörterbuch sind die Schlüssel-Strings.

Eine Möglichkeit, ein Wörterbuch zu erstellen, ist mit dem leeren Wörterbuch zu starten und Schlüssel hinzu: Wert-Paaren. Das leere Wörterbuch bezeichnet wird <> :

Die erste Aufgabe schafft ein Wörterbuch eng2sp genannt; die anderen Aufgaben fügen Sie neue Schlüssel: Wert-Paare in das Wörterbuch. Wir können den aktuellen Wert des Wörterbuchs in gewohnter Weise drucken:

Der Schlüssel: Wert-Paare des Wörterbuchs werden durch Komma getrennt. Jedes Paar enthält einen Schlüssel und einen durch einen Doppelpunkt getrennt Wert.

Man könnte auch fragen, warum wir mit einer Liste von Tupeln verwenden könnte Wörterbücher überhaupt, wenn das gleiche Konzept der Zuordnung eines Schlüssels auf einen Wert realisiert werden:

Der Grund dafür ist Wörterbücher sind sehr schnell, implementiert unter Verwendung einer Technik Hashing genannt, was uns sehr schnell einen Wert zugreifen können. Im Gegensatz dazu ist die Liste von Tupeln Implementierung langsam. Wenn wir einen Wert, der mit einem Schlüssel finden wollten, würden wir jedes Tupel laufen müssen, das 0-te Element zu prüfen. Was passiert, wenn der Schlüssel nicht einmal in der Liste war? Wir müssten Ende davon bekommen, um herauszufinden.

Eine andere Möglichkeit, ein Wörterbuch zu erzeugen, ist eine Liste von Schlüssel bereitzustellen: Wertepaare die gleiche Syntax wie die vorherige Ausgabe mit:

Es spielt keine Rolle, in welcher Reihenfolge wir die Paare schreiben. Die Werte in einem Wörterbuch mit Schlüssel zugegriffen wird, nicht mit Indizes, so gibt es keine Notwendigkeit, über Ordnung zu sorgen.

Hier ist, wie wir einen Schlüssel verwenden, um den entsprechenden Wert zu sehen:

Der Schlüssel „zwei“ ergibt den Wert „dos“.

Listen, Tupel und Strings wurden genannt Sequenzen. weil ihre Einzelteile, um auftreten. Das Wörterbuch ist die erste Verbindung Art, die wir gesehen haben, dass nicht eine Folge ist, so können wir nicht Index oder ein Wörterbuch in Scheiben schneiden.

20.1. Wörterbuch operations¶

Die del-Anweisung entfernt ein Schlüssel: Wert-Paar aus einem Wörterbuch. Zum Beispiel enthält die folgende Wörterbuch die Namen von verschiedenen Früchten und der Anzahl der jeweiligen Frucht auf Lager:

Wenn jemand alle der Birnen kauft, können wir den Eintrag aus dem Wörterbuch entfernen:

erhalten verbessert definitiv die Semantik einer Sparse Matrix zugreift. Schande über die Syntax.

20.5. Memoization¶

Wenn Sie mit der FIBO-Funktion aus dem Kapitel über die Rekursion rumgespielt, haben Sie vielleicht bemerkt, dass je größer das Argument Sie liefern, desto länger die Funktion auszuführen dauert. Darüber hinaus erhöht sich die Laufzeit sehr schnell. Auf einer unserer Maschinen, fib (20) endet sofort, fib (30) dauert etwa eine Sekunde, und fib (40) dauert etwa für immer.







Um zu verstehen, warum, betrachten diese Aufrufgraphen für fib mit n = 4:

Wie Wörterbuch in Python zu tun

Ein Anruf Graph zeigt einige Funktionsrahmen (Instanzen, wenn die Funktion aufgerufen wurde) mit Zeilen, wobei jeden Rahmen auf den Rahmen der Funktionen verbinden es erfordert. Am oberen Rand des Diagramms, fib mit n = 4 Anrufe fib mit n = 3 und n = 2. Im Gegenzug fib mit n = 3 Anrufe fib mit n = 2 und n = 1. Und so weiter.

Zählen Sie, wie oft fib (0) und fib (1) genannt werden. Dies ist eine ineffiziente Lösung für das Problem, und es wird noch viel schlimmer als das Argument wird größer.

Eine gute Lösung ist Spur von Werten zu halten, die bereits durch deren Speicherung in einem Wörterbuch berechnet wurde. Ein vorher berechneter Wert, der für die spätere Verwendung gespeichert wird, wird ein Memo genannt. Hier ist eine Implementierung von fib mit Notizen:

Das Wörterbuch namens alreadyknown verfolgt die Fibonacci-Zahlen, die wir bereits kennen. Wir beginnen mit nur zwei Paaren: 0 Karten bis 1; und 1-Karten bis 1.

Jedes Mal, wenn fib genannt wird, überprüft es das Wörterbuch, um zu bestimmen, ob es das Ergebnis enthält. Wenn es sie gibt, kann die Funktion sofort zurück, ohne weitere rekursive Aufrufe zu machen. Wenn nicht, hat es den neuen Wert zu berechnen. Der neue Wert wird in das Wörterbuch, bevor die Funktion zurückkehrt hinzugefügt.

Mit dieser Version von fib. Unsere Maschinen können fib (100) in einem eyeblink berechnen.

20.6. Zählen letters¶

In den Übungen in Kapitel 8 (Strings) schrieben wir eine Funktion, die die Anzahl der Vorkommen eines Briefes in einem String gezählt. Eine allgemeinere Version dieses Problems ist es, eine Frequenztabelle der Buchstaben in der Zeichenkette zu bilden, das heißt, wie oft jeder Buchstabe erscheint.

Eine solche könnte eine Frequenztabelle zum Komprimieren einer Textdatei nützlich sein. Da verschiedene Buchstaben mit unterschiedlichen Frequenzen auftreten, können wir eine Datei durch kürzeren Codes für gemeinsame Buchstaben und längere Codes für Buchstaben komprimieren, die weniger häufig auftreten.

Wörterbücher bieten eine elegante Art und Weise eine Frequenztabelle zu erzeugen:

Wir beginnen mit einem leeren Wörterbuch. Für jeden Buchstaben in der Zeichenkette, so finden wir die aktuelle Anzahl (möglicherweise null) und es erhöhen. Am Ende enthält das Wörterbuch Buchstabenpaare und ihre Frequenzen.

Es könnte attraktiver sein, die Frequenztabelle in alphabetischer Reihenfolge angezeigt werden soll. Wir können das tun mit den Einzelteilen und Sortiermethoden:

Beachten Sie in der ersten Zeile mussten wir die Typkonvertierungsfunktion Liste aufrufen. Das macht das Versprechen, das wir von Elementen in eine Liste, einen Schritt, der notwendig ist, bevor wir die Liste der Sortiermethode verwenden können.

20.7. Glossar¶

Graph Ein Graph nennen von Knoten besteht, die Funktionsrahmen repräsentieren (oder Invokationen) und gerichteten Kanten (Linien mit Pfeilen) anzeigen, die zu einer anderen Frames gab Frames. Wörterbuch a Sammlung von Schlüsseln: Wert-Paaren, die von Schlüsseln auf Werte abbildet. Die Tasten können eine beliebigen unveränderlicher Wert sein, und der zugeordnete Wert kann von jeder Art sein. unveränderliche Datenwert ein Datenwert, der nicht verändert werden können. Zuweisungen auf Elemente oder Scheiben (Unterteile) der unveränderliche Werte verursachen einen Laufzeitfehler. Schlüssel Ein Datenelement, das auf einen Wert in einem Wörterbuch abgebildet wird. Die Schlüssel werden verwendet, um Werte in einem Wörterbuch nachschlagen. Jeder Schlüssel muss über das Wörterbuch eindeutig sein. Schlüssel: Wert-Paar Eines der Paare von Elementen in einem Wörterbuch. Die Werte werden in einem Wörterbuch von Schlüssel nachgeschlagen. Mapping-Typ A Abbildungstyp ist ein Datentyp, das aus einer Sammlung von Schlüsseln und zugeordneten Werten. Pythons nur eingebaut ist Mappingart das Wörterbuch. Wörterbücher implementieren den assoziativen Array abstrakten Datentyp. memo Zwischenlagerung von vorberechneten Werten zu vermeiden, dass die gleiche Berechnung duplizieren. änderbare Datenwert ein Datenwert, der geändert werden kann. Die Typen aller veränderbaren Werte sind Verbindungstypen. Listen und Wörterbücher sind wandelbar; Strings und Tupel nicht.

20.8. Exercises¶

Schreiben Sie ein Programm, das einen String liest und gibt eine Tabelle der Buchstaben des Alphabets in alphabetischer Reihenfolge, die in der Zeichenfolge auftreten zusammen mit der Anzahl der einzelnen Buchstaben auftritt. Fall sollte ignoriert werden. Ein Beispiel für die Ausgabe des Programms, wenn der Benutzer die Daten eingibt „ist diese Zeichenfolge mit Groß- und Kleinbuchstaben“, würde dies so aussehen:

Geben Sie die Antwort der Python-Interpreter zu jedem der folgenden von einer kontinuierlichen Interpreter-Sitzung:

Wie oft alice das Wort in dem Buch vorkommen?

Was ist das längste Wort in Alice im Wunderland? Wie viele Zeichen hat es?







In Verbindung stehende Artikel