Dictionaries - Learn Python 3 - Snakify

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.

Advertising by Google, may be based on your interests

2. Wörterbücher anwenden

Wörterbücher werden in folgenden Fällen verwendet:

  • um die Anzahl einiger Objekte zu zählen. In diesem Fall müssen Sie ein Wörterbuch erstellen, in dem Schlüssel Objekte und Werte Beträge sind.
  • die Speicherung von Daten, die dem Objekt zugeordnet sind. Die Schlüssel sind Objekte, die Werte sind assoziierte Daten. Wenn Sie beispielsweise die Folgenummer eines Monats anhand seines Namens bestimmen möchten, können Sie dies mit dem Wörterbuch Num['January'] = 1; Num['February'] = 2; ... tun Num['January'] = 1; Num['February'] = 2; ...
  • Einstellen der Korrespondenz zwischen den Objekten (zum Beispiel "der Eltern-Nachkommen"). Der Schlüssel ist das Objekt und der Wert ist das entsprechende Objekt.
  • Wenn Sie ein einfaches Array benötigen, aber der Maximalwert des Index des Elements sehr groß ist, obwohl nicht alle möglichen Indizes verwendet werden (sogenanntes "Sparse Array"), können Sie assoziatives Array verwenden, um Speicher zu sparen.

    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.

    Advertising by Google, may be based on your interests
  • 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) .

    Advertising by Google, may be based on your interests

    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)
    
    Advertising by Google, may be based on your interests
    Advertising by Google, may be based on your interests