Website-Suche

Das Verständnis von Wörterbüchern in Python 3


Einführung

Das Wörterbuch ist der integrierte Mapping-Typ von Python. Wörterbücher ordnen Schlüssel den Werten zu, und diese Schlüssel-Wert-Paare bieten eine nützliche Möglichkeit, Daten in Python zu speichern.

Typischerweise werden sie verwendet, um Daten zu halten, die miteinander verbunden sind, wie die Informationen in einer ID oder einem Benutzerprofil. Wörterbücher werden mit geschweiften Klammern auf beiden Seiten { } konstruiert.

Info: Um dem Beispielcode in diesem Tutorial zu folgen, öffnen Sie eine Python-interaktive Shell auf Ihrem lokalen System, indem Sie den Befehl python3 ausführen. Dann können Sie die Beispiele kopieren, einfügen oder bearbeiten, indem Sie sie nach der >>> Eingabeaufforderung hinzufügen.

Ein Wörterbuch sieht so aus:

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}

Neben den geschweiften Klammern gibt es auch Doppelpunkte (:) im gesamten Wörterbuch.

Die Wörter links von den Doppelpunkt sind die Schlüssel. Schlüssel können aus jedem unveränderlichen Datentyp bestehen. Die Schlüssel im obigen Wörterbuch sind:

    'username'
    'online'
    'followers'

Jeder der Schlüssel im obigen Beispiel sind Zeichenfolgenwerte.

Die Worte rechts von den Doppelpunkten sind die Werte. Werte können aus jedem Datentyp bestehen. Die Werte im obigen Wörterbuch sind:

    'sammy-shark'
    True
    987

Jeder dieser Werte ist entweder eine Zeichenkette, Boolean oder Ganzzahl.

Lass uns das Wörterbuch sammy ausdrucken:

print(sammy)
{'username': 'sammy-shark', 'followers': 987, 'online': True}

Wenn man sich die Ausgabe ansieht, kann sich die Reihenfolge der Schlüssel-Wert-Paare verschoben haben. In Python-Version 3.5 und früher ist der Datentyp Dictionary ungeordnet. In Python-Version 3.6 und später bleibt der Datentyp Dictionary jedoch geordnet. Unabhängig davon, ob das Dictionary geordnet ist oder nicht, bleiben die Schlüssel-Wert-Paare intakt, sodass wir auf Daten basierend auf ihrer relationalen Bedeutung zugreifen können.

Voraussetzungen

Sie sollten Python 3 installiert und eine Programmierumgebung auf Ihrem Computer oder Server eingerichtet haben. Wenn Sie keine Programmierumgebung eingerichtet haben, können Sie auf die Installations- und Einrichtungsanleitungen für eine lokale Programmierumgebung oder für eine Programmierumgebung auf Ihrem Server verweisen, die für Ihr Betriebssystem (Ubuntu, CentOS, Debian usw.) geeignet ist.

Zugriff auf Wörterbuch-Elemente

Wir können die Werte eines Dictionaries abrufen, indem wir die entsprechenden Schlüssel ansprechen.

Zugriff auf Datenelemente mit Schlüsseln

Da Dictionaries Schlüssel-Wert-Paare zum Speichern von Daten anbieten, können sie wichtige Elemente in Ihrem Python-Programm sein.

Wenn wir Sammys Benutzernamen isolieren wollen, können wir das tun, indem wir sammy['username'] aufrufen. Lassen Sie uns das ausdrucken:

print(sammy['username'])
sammy-shark

Wörterbücher verhalten sich wie eine Datenbank, da man anstatt wie bei einer Liste einen Integer aufzurufen, um einen bestimmten Indexwert zu erhalten, einem Schlüssel einen Wert zuweist und diesen Schlüssel aufrufen kann, um seinen zugehörigen Wert zu erhalten.

Durch das Aufrufen des Schlüssels 'username' erhalten wir den Wert dieses Schlüssels, der 'sammy-shark' ist.

Die verbleibenden Werte im sammy Dictionary können auf ähnliche Weise im selben Format aufgerufen werden:

sammy['followers']
Returns 987

sammy['online']
Returns True

Durch die Nutzung der Schlüssel-Wert-Paare von Wörterbüchern können wir Schlüssel heranziehen, um Werte abzurufen.

Methoden zur Zugriff auf Elemente verwenden

Zusätzlich zur Verwendung von Schlüsseln, um auf Werte zuzugreifen, können wir auch mit einigen eingebauten Methoden arbeiten:

  • dict.keys() isoliert Schlüssel
  • dict.values() isoliert Werte
  • dict.items() gibt Elemente in einem Listenformat von (Schlüssel, Wert) Tupelpaaren zurück.

Um die Schlüssel zurückzugeben, würden wir die dict.keys() Methode verwenden. In unserem Beispiel würde das den Variablennamen verwenden und wäre sammy.keys(). Lassen Sie uns das an eine print() Methode übergeben und die Ausgabe betrachten:

print(sammy.keys())
dict_keys(['followers', 'username', 'online'])

Wir erhalten eine Ausgabe, die die Schlüssel innerhalb eines iterierbaren Sichtobjekts der Klasse dict_keys platziert. Die Schlüssel werden dann in einem Listenformat ausgegeben.

Diese Methode kann verwendet werden, um über Dictionaries abzufragen. Zum Beispiel können wir uns die gemeinsamen Schlüssel anschauen, die zwischen zwei Dictionary-Datenstrukturen geteilt werden:

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}
jesse = {'username': 'JOctopus', 'online': False, 'points': 723}

for common_key in sammy.keys() & jesse.keys():
    print(sammy[common_key], jesse[common_key])

Das Wörterbuch sammy und das Wörterbuch jesse sind jeweils ein Benutzerprofildictionary.

Ihre Profile haben unterschiedliche Schlüssel, weil Sammy ein soziales Profil mit zugehörigen Followern hat und Jesse ein Gaming-Profil mit zugehörigen Punkten. Die 2 Schlüssel, die sie gemeinsam haben, sind username und online Status, die wir finden können, wenn wir dieses kleine Programm ausführen:

sammy-shark JOctopus
True False

Wir könnten das Programm sicherlich verbessern, um die Ausgabe benutzerfreundlicher zu gestalten, aber dies zeigt, dass dict.keys() verwendet werden kann, um verschiedene Wörterbücher zu vergleichen und zu sehen, was sie gemeinsam haben oder nicht. Dies ist besonders nützlich für große Wörterbücher.

Similarly, können wir die dict.values()-Methode verwenden, um die Werte im sammy-Wörterbuch abzufragen, das als sammy.values() konstruiert wird. Lassen Sie uns diese ausdrucken:

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}

print(sammy.values())
dict_values([True, 'sammy-shark', 987])

Die Methoden keys() und values() geben unsortierte Listen der Schlüssel und Werte im sammy Wörterbuch zurück, wobei die Sichtobjekte dict_keys und dict_values entsprechend verwendet werden.

Wenn wir an allen Elementen eines Dictionaries interessiert sind, können wir sie mit der items()-Methode darauf zugreifen:

print(sammy.items())
dict_items([('online', True), ('username', 'sammy-shark'), ('followers', 987)])

Das zurückgegebene Format hiervon ist eine Liste, die aus (key, value) Tupelpaaren mit dem dict_items Sichtobjekt besteht.

Wir können das zurückgegebene Listenformat mit einer for Schleife durchlaufen. Zum Beispiel können wir jeden der Schlüssel und Werte eines gegebenen Wörterbuchs ausdrucken und es dann verständlicher machen, indem wir einen String hinzufügen:

for key, value in sammy.items():
    print(key, 'is the key for the value', value)
online is the key for the value True
followers is the key for the value 987
username is the key for the value sammy-shark

Die for-Schleife oben durchlief die Elemente des sammy-Wörterbuchs und gab die Schlüssel und Werte zeilenweise aus, mit Informationen, um es den Menschen leichter verständlich zu machen.

Wir können integrierte Methoden verwenden, um auf Elemente, Werte und Schlüssel aus Dictionaries zuzugreifen.

Dictionaries ändern

Wörterbücher sind eine veränderbare Datenstruktur, daher können Sie sie modifizieren. In diesem Abschnitt werden wir das Hinzufügen und Löschen von Wörterbuch-Elementen durchgehen.

Hinzufügen und Ändern von Wörterbuchelementen

Ohne eine Methode oder Funktion zu verwenden, können Sie Schlüssel-Wert-Paare zu Dictionaries hinzufügen, indem Sie die folgende Syntax verwenden:

dict[key] = value

Wir werden uns ansehen, wie das in der Praxis funktioniert, indem wir ein Schlüssel-Wert-Paar zu einem Wörterbuch namens usernames hinzufügen:

usernames = {'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}

usernames['Drew'] = 'squidly'

print(usernames)
{'Drew': 'squidly', 'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}

Wir sehen jetzt, dass das Wörterbuch mit dem 'Drew': 'squidly' Schlüssel-Wert-Paar aktualisiert wurde. Da Wörterbücher möglicherweise ungeordnet sind, kann dieses Paar irgendwo in der Wörterbuchausgabe vorkommen. Wenn wir das usernames Wörterbuch später in unserer Programmdatei verwenden, wird es das zusätzliche Schlüssel-Wert-Paar enthalten.

Zusätzlich kann diese Syntax verwendet werden, um den Wert, der einem Schlüssel zugewiesen ist, zu ändern. In diesem Fall werden wir auf einen vorhandenen Schlüssel verweisen und ihm einen anderen Wert übergeben.

Lassen Sie uns ein Wörterbuch drew betrachten, das einer der Benutzer in einem bestimmten Netzwerk ist. Wir sagen, dass dieser Benutzer heute einen Anstieg an Followern hatte, also müssen wir den ganzzahligen Wert, der dem Schlüssel 'followers' übergeben wird, aktualisieren. Wir werden die Funktion print() verwenden, um zu überprüfen, ob das Wörterbuch geändert wurde.

drew = {'username': 'squidly', 'online': True, 'followers': 305}

drew['followers'] = 342

print(drew)
{'username': 'squidly', 'followers': 342, 'online': True}

Im Ergebnis sehen wir, dass die Anzahl der Follower von der Ganzzahl 305 auf 342 angestiegen ist.

Wir können diese Methode verwenden, um Schlüssel-Wert-Paare zu Wörterbüchern mit Benutzereingaben hinzuzufügen. Lassen Sie uns ein schnelles Programm, usernames.py, schreiben, das in der Befehlszeile läuft und Benutzereingaben ermöglicht, um weitere Namen und zugehörige Benutzernamen hinzuzufügen:

Define original dictionary
usernames = {'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}

Set up while loop to iterate
while True:

    # Request user to enter a name
    print('Enter a name:')

    # Assign to name variable
    name = input()

    # Check whether name is in the dictionary and print feedback
    if name in usernames:
        print(usernames[name] + ' is the username of ' + name)

    # If the name is not in the dictionary...
    else:

        # Provide feedback        
        print('I don\'t have ' + name + '\'s username, what is it?')

        # Take in a new username for the associated name
        username = input()

        # Assign username value to name key
        usernames[name] = username

        # Print feedback that the data was updated
        print('Data updated.')

Lass uns das Programm in der Befehlszeile ausführen:

  1. python usernames.py

Wenn wir das Programm ausführen, erhalten wir eine Ausgabe wie die folgende:

Enter a name:
Sammy
sammy-shark is the username of Sammy
Enter a name:
Jesse
I don't have Jesse's username, what is it?
JOctopus
Data updated.
Enter a name:

Wenn wir mit dem Testen des Programms fertig sind, können wir CTRL + C drücken, um das Programm zu verlassen. Sie können einen Trigger einrichten, um das Programm zu beenden (zum Beispiel das Eingeben des Buchstabens q) mit einer Bedingung, um den Code zu verbessern.

Dies zeigt, wie Sie Wörterbücher interaktiv ändern können. Mit diesem speziellen Programm verlieren Sie sofort alle Ihre Daten, sobald Sie das Programm mit CTRL + C beenden, es sei denn, Sie implementieren eine Möglichkeit zum Lesen und Schreiben von Dateien.

Wir können auch Wörterbücher hinzufügen und ändern, indem wir die dict.update() Methode verwenden. Dies unterscheidet sich von der append() Methode, die in Listen verfügbar ist.

In dem jesse Wörterbuch unten, fügen wir den Schlüssel 'followers' hinzu und geben ihm einen ganzzahligen Wert mit jesse.update(). Danach lassen Sie uns das aktualisierte Wörterbuch mit print() ausgeben.

jesse = {'username': 'JOctopus', 'online': False, 'points': 723}

jesse.update({'followers': 481})

print(jesse)
{'followers': 481, 'username': 'JOctopus', 'points': 723, 'online': False}

Aus der Ausgabe können wir sehen, dass wir erfolgreich das Schlüssel-Wert-Paar 'followers': 481 zum Wörterbuch jesse hinzugefügt haben.

Wir können auch die dict.update() Methode verwenden, um ein vorhandenes Schlüssel-Wert-Paar zu ändern, indem wir einen bestimmten Wert für einen bestimmten Schlüssel ersetzen.

Lass uns den Online-Status von Sammy im sammy Wörterbuch von True auf False ändern:

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}

sammy.update({'online': False})

print(sammy)
{'username': 'sammy-shark', 'followers': 987, 'online': False}

Die Zeile sammy.update({'online': False}) bezieht sich auf den vorhandenen Schlüssel 'online' und ändert seinen Boolean-Wert von True auf False. Wenn wir print() auf das Dictionary aufrufen, sehen wir, dass die Aktualisierung im Ausgabewert stattfindet.

Um Elemente zu Dictionaries hinzuzufügen oder Werte zu ändern, können wir entweder die dict[key]=value Syntax oder die Methode dict.update() verwenden.

Löschen von Wörterbuchelementen

Genauso wie Sie Schlüssel-Wert-Paare hinzufügen und Werte im Datentyp Wörterbuch ändern können, können Sie auch Gegenstände innerhalb eines Wörterbuchs löschen.

Um ein Schlüssel-Wert-Paar aus einem Wörterbuch zu entfernen, verwenden wir die folgende Syntax:

del dict[key]

Lass uns das jesse Wörterbuch nehmen, das einen der Benutzer repräsentiert. Wir werden sagen, dass Jesse die Online-Plattform zum Spielen von Spielen nicht mehr nutzt, also werden wir das Element, das mit dem 'points' Schlüssel verbunden ist, entfernen. Dann werden wir das Wörterbuch ausdrucken, um zu bestätigen, dass das Element gelöscht wurde:

jesse = {'username': 'JOctopus', 'online': False, 'points': 723, 'followers': 481}

del jesse['points']

print(jesse)
{'online': False, 'username': 'JOctopus', 'followers': 481}

Die Zeile del jesse['points'] entfernt das Schlüssel-Wert-Paar 'points': 723 aus dem jesse-Wörterbuch.

Wenn wir ein Wörterbuch von all seinen Werten befreien möchten, können wir dies mit der Methode dict.clear() tun. Dies wird ein bestimmtes Wörterbuch erhalten, falls wir es später im Programm benötigen, aber es wird keine Elemente mehr enthalten.

Lass uns alle Elemente im jesse Wörterbuch entfernen:

jesse = {'username': 'JOctopus', 'online': False, 'points': 723, 'followers': 481}

jesse.clear()

print(jesse)
{}

Die Ausgabe zeigt, dass wir jetzt ein leeres Wörterbuch ohne Schlüssel-Wert-Paare haben.

Wenn wir ein bestimmtes Wörterbuch nicht mehr benötigen, können wir del verwenden, um es vollständig loszuwerden:

del jesse

print(jesse)

Wenn wir einen Aufruf an print() ausführen, nachdem wir das jesse Dictionary gelöscht haben, erhalten wir den folgenden Fehler:

...
NameError: name 'jesse' is not defined

Da Dictionaries veränderliche Datentypen sind, können sie ergänzt, modifiziert sowie Elemente hinzugefügt, entfernt und geleert werden.

Schlussfolgerung

Dieses Tutorial behandelt die Datenstruktur Wörterbuch in Python. Wörterbücher bestehen aus Schlüssel-Wert-Paaren und bieten eine Möglichkeit, Daten zu speichern, ohne auf Indizierung angewiesen zu sein. Dies ermöglicht es uns, Werte basierend auf ihrer Bedeutung und Beziehung zu anderen Datentypen abzurufen.

Von hier aus können Sie mehr über andere Datentypen in unserem Tutorial „Datenarten verstehen“ erfahren.

Sie können den Dictionary-Datentyp sehen, der in Programmierprojekten wie Web-Scraping mit Scrapy verwendet wird.