Grundlegendes zu Wörterbüchern in Python 3

Einführung

dictionary ist Pythons integriertermapping-Typ. Wörterbücher ordnenkeysvalues zu, und diese Schlüssel-Wert-Paare bieten eine nützliche Möglichkeit, Daten in Python zu speichern.

Wörterbücher werden normalerweise verwendet, um verwandte Daten zu speichern, z. B. die in einer ID oder einem Benutzerprofil enthaltenen Informationen. Sie werden auf beiden Seiten mit geschweiften Klammern{} erstellt.

Ein Wörterbuch sieht so aus:

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

Zusätzlich zu den geschweiften Klammern gibt es im gesamten Wörterbuch Doppelpunkte (:).

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

  • 'username'

  • 'online'

  • 'followers'

Jeder der Schlüssel im obigen Beispiel iststring Werte.

Die Wörter rechts von den Doppelpunkten sind die Werte. Values kann aus einem beliebigen Datentyp bestehen. Die Werte im obigen Wörterbuch sind:

  • 'sammy-shark'

  • True

  • 987

Jeder dieser Werte ist entweder eine Zeichenfolge,Boolean oderinteger.

Drucken wir das Wörterbuchsammy aus:

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

Betrachtet man die Ausgabe, kann sich die Reihenfolge der Schlüssel-Wert-Paare verschoben haben. In Python 3.5 und früheren Versionen ist der Dictionary-Datentyp ungeordnet. In Python Version 3.6 und höher bleibt der Dictionary-Datentyp jedoch in der Reihenfolge. Unabhängig davon, ob das Wörterbuch bestellt wurde oder nicht, bleiben die Schlüssel-Wert-Paare erhalten, sodass wir auf Daten zugreifen können, die auf ihrer relationalen Bedeutung basieren.

Zugriff auf Dictionary-Elemente

Wir können die Werte eines Wörterbuchs aufrufen, indem wir auf die zugehörigen Schlüssel verweisen.

Zugreifen auf Datenelemente mit Schlüsseln

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

Wenn wir Sammys Benutzernamen isolieren möchten, können wir dies tun, indem wirsammy['username'] aufrufen. Drucken wir das aus:

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

Wörterbücher verhalten sich dahingehend wie eine Datenbank, dass Sie, anstatt eine Ganzzahl aufzurufen, um einen bestimmten Indexwert abzurufen, wie Sie es bei einer Liste tun würden, einem Schlüssel einen Wert zuweisen und diesen Schlüssel aufrufen können, um den zugehörigen Wert abzurufen.

Durch Aufrufen des Schlüssels'username' erhalten wir den Wert dieses Schlüssels, nämlich'sammy-shark'.

Die verbleibenden Werte im Wörterbuch vonsammykönnen ebenfalls im selben Format aufgerufen werden:

sammy['followers']
# Returns 987

sammy['online']
# Returns True

Durch Verwendung der Schlüssel-Wert-Paare der Wörterbücher können wir auf Schlüssel verweisen, um Werte abzurufen.

Zugreifen auf Elemente mithilfe von Methoden

Zusätzlich zur Verwendung von Schlüsseln für den Zugriff auf Werte können wir auch mit einigen integrierten Methoden arbeiten:

  • dict.keys() isoliert Schlüssel

  • dict.values() isoliert Werte

  • dict.items() gibt Elemente in einem Listenformat von(key, value) Tupelpaaren zurück

Um die Schlüssel zurückzugeben, würden wir die Methodedict.keys()verwenden. In unserem Beispiel würde dies den Variablennamen verwenden undsammy.keys() sein. Übergeben wir das an dieprint()-Methode und sehen uns die Ausgabe an:

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

Wir erhalten eine Ausgabe, die die Schlüssel in einem iterierbaren Ansichtsobjekt der Klassedict_keysplatziert. Die Schlüssel werden dann in einem Listenformat gedruckt.

Diese Methode kann verwendet werden, um wörterbuchübergreifend abzufragen. Wir können uns beispielsweise die gemeinsamen Schlüssel zwischen zwei Wörterbuchdatenstrukturen ansehen:

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örterbuchsammy und das Wörterbuchjesse sind jeweils ein Benutzerprofilwörterbuch.

Ihre Profile haben jedoch unterschiedliche Schlüssel, da Sammy ein soziales Profil mit assoziierten Followern und Jesse ein Spielprofil mit assoziierten Punkten hat. Die 2 Schlüssel, die sie gemeinsam haben, sindusername undonline Status, den wir finden können, wenn wir dieses kleine Programm ausführen:

Outputsammy-shark JOctopus
True False

Wir könnten das Programm sicherlich verbessern, um die Ausgabe für den Benutzer lesbarer zu machen. Dies zeigt jedoch, dassdict.keys() verwendet werden können, um verschiedene Wörterbücher zu überprüfen, um festzustellen, was sie gemeinsam haben oder nicht. Dies ist besonders nützlich für große Wörterbücher.

In ähnlicher Weise können wir diedict.values()-Methode verwenden, um die Werte imsammy-Wörterbuch abzufragen, die alssammy.values() konstruiert würden. Lassen Sie uns diese ausdrucken:

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

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

Sowohl die Methodenkeys() als auchvalues() geben unsortierte Listen der im Wörterbuchsammy enthaltenen Schlüssel und Werte mit den Ansichtsobjektendict_keys bzw.dict_values zurück.

Wenn wir an allen Elementen in einem Wörterbuch interessiert sind, können wir mit der Methodeitems()auf sie zugreifen:

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

Das zurückgegebene Format ist eine Liste, die aus(key, value) Tupelpaaren mit dem Ansichtsobjektdict_itemsbesteht.

Wir können das zurückgegebene Listenformat mit einerfor-Schleife durchlaufen. Zum Beispiel können wir jeden der Schlüssel und Werte eines bestimmten Wörterbuchs ausdrucken und es dann durch Hinzufügen einer Zeichenfolge besser lesbar machen:

for key, value in sammy.items():
    print(key, 'is the key for the value', value)
Outputonline 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 obigefor-Schleife durchlief die Elemente imsammy-Wörterbuch und druckte die Schlüssel und Werte zeilenweise mit Informationen aus, um das Verständnis für den Menschen zu erleichtern.

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

Wörterbücher ändern

Wörterbücher sind eine veränderbare Datenstruktur, sodass Sie sie ändern können. In diesem Abschnitt wird das Hinzufügen und Löschen von Wörterbuchelementen beschrieben.

Wörterbuchelemente hinzufügen und ändern

Ohne Verwendung einer Methode oder Funktion können Sie Wörterbüchern Schlüssel-Wert-Paare hinzufügen, indem Sie die folgende Syntax verwenden:

dict[key] = value

Wir werden untersuchen, wie dies in der Praxis funktioniert, indem wir einem Wörterbuch mit dem Namenusernames ein Schlüssel-Wert-Paar hinzufügen:

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

usernames['Drew'] = 'squidly'

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

Wir sehen jetzt, dass das Wörterbuch mit dem Schlüssel-Wert-Paar'Drew': 'squidly'aktualisiert wurde. Da Wörterbücher möglicherweise ungeordnet sind, kann dieses Paar an einer beliebigen Stelle in der Wörterbuchausgabe auftreten. Wenn wir das Wörterbuchusernamespäter in unserer Programmdatei verwenden, enthält es das zusätzliche Schlüssel-Wert-Paar.

Darüber hinaus kann diese Syntax zum Ändern des einem Schlüssel zugewiesenen Werts verwendet werden. In diesem Fall verweisen wir auf einen vorhandenen Schlüssel und übergeben ihm einen anderen Wert.

Betrachten wir ein Wörterbuchdrew, das einer der Benutzer in einem bestimmten Netzwerk ist. Wir werden sagen, dass dieser Benutzer heute einen Anstieg der Follower hat. Daher müssen wir den an den Schlüssel'followers'übergebenen ganzzahligen Wert aktualisieren. Wir werden dieprint()-Funktion verwenden, um zu überprüfen, ob das Wörterbuch geändert wurde.

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

drew['followers'] = 342

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

In der Ausgabe sehen wir, dass die Anzahl der Follower vom ganzzahligen Wert von305 auf342 gesprungen ist.

Mit dieser Methode können Wörterbücher mit Benutzereingabe um Schlüssel-Wert-Paare erweitert werden. Schreiben wir ein schnelles Programm,usernames.py, das in der Befehlszeile ausgeführt wird und es dem Benutzer ermöglicht, weitere Namen und zugehörige Benutzernamen hinzuzufügen:

usernames.py

# 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.')

Führen Sie das Programm in der Befehlszeile aus:

python usernames.py

Wenn wir das Programm ausführen, erhalten wir ungefähr die folgende Ausgabe:

OutputEnter 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 wirCTRL + C drücken, um das Programm zu verlassen. Sie können einen Trigger einrichten, um das Programm zu beenden (z. B. den Buchstabenq) mit einemconditional statement eingeben, um den Code zu verbessern.

Dies zeigt, wie Sie Wörterbücher interaktiv ändern können. Bei diesem speziellen Programm gehen alle Daten verloren, sobald Sie das Programm mitCTRL + C beenden, es sei denn, Sie implementieren einen Weg zuhandle reading and writing files.

Wir können auch Wörterbücher hinzufügen und ändern, indem wir die Methodedict.update()verwenden. Dies unterscheidet sich von den in Listen verfügbarenappend()method.

Fügen Sie im folgendenjesse-Wörterbuch den Schlüssel'followers' hinzu und geben Sie ihm einen ganzzahligen Wert mitjesse.update(). Anschließend istprint()das aktualisierte Wörterbuch.

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

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

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

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

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

Ändern Sie den Online-Status von Sammy imsammy-Wörterbuch vonTrue inFalse:

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

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

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

Die Zeilesammy.update({'online': False}) verweist auf den vorhandenen Schlüssel'online' und ändert seinen Booleschen Wert vonTrue aufFalse. Wenn wirprint() das Wörterbuch aufrufen, sehen wir, dass die Aktualisierung in der Ausgabe stattfindet.

Um Elemente zu Wörterbüchern hinzuzufügen oder Werte zu ändern, können Sie die Syntaxdict[key] = value oder die Methodedict.update() verwenden.

Wörterbuchelemente löschen

So wie Sie Schlüssel-Wert-Paare hinzufügen und Werte innerhalb des Wörterbuchdatentyps ändern können, können Sie auch Elemente 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]

Nehmen wir dasjesse-Wörterbuch, das einen der Benutzer darstellt. Wir werden sagen, dass Jesse die Online-Plattform nicht mehr zum Spielen verwendet, daher entfernen wir das Element, das dem Schlüssel'points'zugeordnet ist. Anschließend drucken wir das Wörterbuch aus, um zu bestätigen, dass das Element gelöscht wurde:

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

del jesse['points']

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

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

Wenn wir ein Wörterbuch von all seinen Werten löschen möchten, können wir dies mit der Methodedict.clear()tun. Auf diese Weise wird ein bestimmtes Wörterbuch beibehalten, falls es später im Programm verwendet werden muss, es enthält jedoch keine Elemente mehr.

Entfernen wir alle Elemente imjesse-Wörterbuch:

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

jesse.clear()

print(jesse)
Output{}

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

Wenn wir kein bestimmtes Wörterbuch mehr benötigen, können wirdel verwenden, um es vollständig zu entfernen:

del jesse

print(jesse)

Wenn wir nach dem Löschen desjesse-Wörterbuchs einen Aufruf vonprint() ausführen, wird die folgende Fehlermeldung angezeigt:

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

Da Wörterbücher veränderbare Datentypen sind, können sie hinzugefügt, geändert und Elemente entfernt und gelöscht werden.

Fazit

Dieses Tutorial ging die Wörterbuchdatenstruktur in Python durch. Wörterbücher bestehen aus Schlüssel-Wert-Paaren und bieten die Möglichkeit, Daten zu speichern, ohne auf die Indizierung angewiesen zu sein. Auf diese Weise können wir Werte basierend auf ihrer Bedeutung und Beziehung zu anderen Datentypen abrufen.

Weitere Informationen zu anderen Datentypen finden Sie in unserem Lernprogramm „https://www.digitalocean.com/community/tutorials/understanding-data-types-in-python-3[Understanding Data Types]“.

Sie können den Wörterbuchdatentyp sehen, der in Programmierprojekten wieweb scraping with Scrapy verwendet wird.