Lesson 11
Wörterbücher
1. Wörterbücher
Normale Listen (Arrays) sind normalerweise eine Menge nummerierter Elemente. Wenn Sie also einen Verweis auf ein Listenelement erstellen möchten, müssen Sie dessen Nummer angeben. Die Nummer des Elements in der Liste identifiziert das Element selbst eindeutig. Aber Identifikationsnummern sind nicht immer bequem. Zum Beispiel verwenden die Linien von Zügen in Russland Buchstaben und Zahlen als Identifikationscode (Nummer und eine Ziffer), auch numerisch-alphabetischer Code kennzeichnet die Flüge, dh Informationen über Flüge, Züge oder Flugzeug ID sollten nicht als eine Zahl sondern als gespeichert werden eine Textzeichenfolge
Die Datenstruktur, die die Verwendung eines beliebigen Indextyps anstelle eines numerischen Index ermöglicht, wird als Dictionary oder assoziatives Array bezeichnet . Die entsprechende Datenstruktur in Python heißt dict
.
Betrachten Sie ein einfaches Beispiel. Holen Sie sich das Wörterbuch Capitals
, wobei index der Name des Landes ist, und der Wert - der Name der Hauptstadt dieses Landes. Jetzt für eine Reihe mit dem Namen des Landes können wir leicht seine Hauptstadt identifizieren.
# Erstelle leere dict Capitals Capitals = dict() # Fülle es mit einigen Werten Capitals['Russia'] = 'Moscow' Capitals['Ukraine'] = 'Kiev' Capitals['USA'] = 'Washington' Countries = ['Russia', 'France', 'USA', 'Russia'] for country in Countries: # Überprüfen Sie für jedes Land aus der Liste, ob es sich um das Wörterbuch Capitals handelt if country in Capitals: print('The capital of ' + country + ' is ' + Capitals[country]) else: print('The capital of ' + country + ' is unknown')
Jedes Element des Wörterbuchs besteht also aus zwei Objekten: Schlüssel und Werten . In unserem Beispielschlüssel ist der Name des Landes und der Wert ist der Name des Kapitals. Der Schlüssel identifiziert das Element des Wörterbuchs, der Wert sind die Daten, die dem gegebenen Schlüssel entsprechen. Schlüsselwerte sind eindeutig, dh im Wörterbuch können nicht zwei identische Schlüssel vorkommen.
Wir sind die Wörterbücher um uns gewöhnt, die üblichen Papierwörterbücher (definierend, einsprachig, zweisprachig). Zum Definieren des Wörterbuchs ist der Schlüssel das Wort (der Titel des Artikels) und der Wert ist der Artikel selbst. Um auf den Artikel zuzugreifen, müssen Sie den Wortschlüssel angeben.
Ein Telefonbuch ist ein weiteres Beispiel für die Wörterbuchdatenstruktur. In diesem Fall ist der Schlüssel der Name und der Wert ist die Telefonnummer. Sowohl für das Wörterbuch als auch für das Telefonbuch ist es einfach, ein Element des Wörterbuchs mit einem bestimmten Schlüssel zu finden (z. B. wenn Datensätze in alphabetischer Reihenfolge der Schlüssel gespeichert sind, können Sie Ihren Schlüssel leicht mit einer Binärsuche finden), aber wenn der Schlüssel ist unbekannt, und wir kennen nur den Wert, die Suche nach dem Element mit dem gegebenen Wert kann eine konsistente Sicht auf alle Elemente des Wörterbuchs erfordern.
Ein wichtiges Merkmal des assoziativen Arrays besteht darin, dass es dynamisch ist, dh Sie können neue Elemente mit beliebigen Schlüsseln hinzufügen und die vorhandenen Elemente löschen. Die Größe des verwendeten Speichers ist proportional zur Größe des assoziativen Arrays. Der Zugriff auf die Elemente eines assoziativen Arrays ist langsamer als bei gewöhnlichen Arrays, aber immer noch ziemlich schnell.
In Python kann der Schlüssel ein beliebiger unveränderlicher (nicht veränderbarer) Datentyp sein: Ganzzahlen und reelle Zahlen, Strings, Tupel. Der Schlüssel im Wörterbuch kann nicht ein Satz sein, sondern kann ein Element des Typs sein frozenset
: ein spezieller Datentyp Analogon eines Typ - set
, die nach der Erstellung nicht geändert werden kann. Der Wert des Wörterbuchelements kann ein beliebiger Datentyp einschließlich modifizierbar sein.
2. Wörterbücher anwenden
Wörterbücher werden in folgenden Fällen verwendet:
Num['January'] = 1; Num['February'] = 2; ...
tun Num['January'] = 1; Num['February'] = 2; ...
Ein leeres Wörterbuch kann mit der Funktion dict()
oder einem leeren Paar geschweifter Klammern {}
(dies ist der Grund, warum die geschweiften Klammern nicht zum Erstellen eines leeren Satzes verwendet werden können). Um ein Wörterbuch mit einer Reihe von Anfangswerten zu erstellen, können Sie die folgenden Konstruktionen verwenden:
Capitals = {'Russia': 'Moscow', 'Ukraine': 'Kiev', 'USA': 'Washington'} Capitals = dict(RA = 'Moscow', Ukraine = 'Kiev', USA = 'Washington') Capitals = dict([("Russia", "Moscow"), ("Ukraine", "Kiev"), ("USA", "Washington")]) Capitals = dict(zip(["Russia", "Ukraine", "USA"], ["Moscow", "Kiev", "Washington"])) print(Capitals)
Die ersten beiden Methoden können nur zum Erstellen kleiner Wörterbücher verwendet werden, indem alle Elemente aufgelistet werden. Außerdem werden in der zweiten Methode die Schlüssel als benannte Parameter von dict
, so dass in diesem Fall die Schlüssel nur Zeichenfolgen und nur korrekte Identifikatoren sein können. Im dritten und vierten Fall können Sie große Wörterbücher erstellen, wenn übertragene Argumente eine vorgefertigte Liste sind, die nicht nur durch Auflisten aller Elemente erhalten werden kann, sondern während der Ausführung des Programms auf andere Weise erstellt wird. Auf die dritte Art muss die Funktion dict
eine Liste erhalten, in der jedes Element ein Tupel aus zwei Elementen ist: Schlüssel und Wert. Die vierte Methode verwendet die Funktion zip
, die zwei Listen gleicher Länge erhalten muss: eine Liste von Schlüsseln und eine Liste von Werten.
3. Mit Wörterbuchelementen arbeiten
Grundlegende Operation: Wert des Elements durch seinen Schlüssel erhalten. Es ist genau wie für Listen geschrieben: A[key]
. Wenn im Wörterbuch kein Element mit dem angegebenen Schlüssel vorhanden ist, wird die Ausnahme KeyError
.
Eine andere Möglichkeit, den Wert basierend auf einem Schlüssel zu definieren, ist eine Methode get
: A.get(key)
. Wenn in dem Wörterbuch kein Element mit dem Schlüssel get
vorhanden ist, wird None
. In der Form mit zwei Argumenten A.get(key, val)
Methode liefert val
, wenn ein Element mit dem key
nicht im Wörterbuch ist.
Um zu prüfen, ob ein Element zu einem Wörterbuch gehört, werden Operationen in
und not in
verwendet, genauso wie für Sätze.
Um dem Wörterbuch ein neues Element hinzuzufügen, müssen Sie ihm nur einen Wert zuweisen: A[key] = value
.
Um ein Element aus dem Wörterbuch zu entfernen, können Sie del A[key]
(die Operation löst eine Ausnahme KeyError
wenn es keinen solchen Schlüssel im Wörterbuch gibt.) Hier sind zwei sichere Möglichkeiten, ein Element aus dem Wörterbuch zu entfernen.
A = {'ab' : 'ba', 'aa' : 'aa', 'bb' : 'bb', 'ba' : 'ab'} key = 'ac' if key in A: del A[key] try: del A[key] except KeyError: print('There is no element with key "' + key + '" in dict') print(A)
Im ersten Fall prüfen wir zunächst das Vorhandensein eines Elements, dann fangen wir die Ausnahme auf und behandeln sie.
Eine andere Möglichkeit, ein Element aus dem Wörterbuch zu entfernen, ist die Methode pop
: A.pop(key)
. Diese Methode gibt den Wert des entfernten Elements zurück, und wenn das Element mit dem angegebenen Schlüssel nicht im Wörterbuch enthalten ist, wird eine Ausnahme ausgelöst. Wenn die Methode pop
einen zweiten Parameter empfängt, wird für das fehlende Element der Wert dieses Parameters zurückgegeben. Dies ermöglicht es, das Entfernen des Elements aus dem Wörterbuch sicher zu organisieren: A.pop(key, None)
.
4. Iterationswörterbuch
Sie können die Schlüssel aller Elemente im Wörterbuch leicht durchlaufen:
A = dict(zip('abcdef', list(range(6)))) for key in A: print(key, A[key])
Die folgenden Methoden geben die Darstellung der Elemente des Wörterbuchs zurück. Die Repräsentationen sind Sets ähnlich, aber sie ändern sich, wenn Sie die Werte der Elemente ändern. Verfahren keys
liefert eine Darstellung der Schlüssel aller Elemente, values
liefert eine Darstellung aller Werte und die Methode items
gibt eine Darstellung aller Paare (Tupel) von Schlüsseln und Werten.
val in A.values()
schnell zu überprüfen, ob der Wert val
unter allen Werten des Wörterbuchs A
, sollten Sie die boolesche Bedingung val in A.values()
. Um Schlüssel und Variablen zu durchlaufen, können Sie Folgendes tun:
A = dict(zip('abcdef', list(range(6)))) for key, val in A.items(): print(key, val)