Python: Dictionarys
► Python-Dokumentation: Mapping Types
Dictionarys sind assoziative Feldvariablen (Arrays), die eine Gruppe von Schlüssel/Wert-Paaren speichern können. Dictionarys werden von geschweiften Klammern {} umschlossen. Die einzelnen Elemente eines Dictionarys werden statt über einen numerischen Index über den entsprechenden Schlüssel angesprochen.
a = {"Vorname":"Hans", "Nachname":"Meier", "Alter":34, "Verheiratet":True}
print(a)
print(a["Nachname"])
print(type(a))
print(type(a["Nachname"]))
a["Alter"] = 35
print(a)
Anzahl der Elemente bestimmen
Die Anzahl der Elemente eines Dictionarys lässt sich wie bei Strings, Listen und Tupeln mit der Funktion len() ermitteln.
a = {"Vorname":"Hans", "Nachname":"Meier", "Alter":34, "Verheiratet":True}
print(len(a))
Schlüssel und Werte eines Dictionarys ausgeben
► Python-Dokumentation: for
Mit for/in (s. Schleifen) können alle Schlüssel eines Dictionarys ausgegeben werden. Die Reihenfolge der Schlüssel ist dabei willkürlich.
In ähnlicher Weise können auch die Werte des Dictionarys ausgegeben werden.
a = {"Vorname":"Hans", "Nachname":"Meier", "Alter":34, "Verheiratet":True}
# Schlüssel ausgeben
for e in a:
print(e)
# Schlüssel und Werte ausgeben
for e in a:
print(e, str(a[e]))
Vorkommen eines Schlüssels ermitteln
► Python-Dokumentation: if
Mit if/in (s. Bedingungen) kann geprüft werden, ob ein bestimmter Schlüssel in dem Dictionary existiert:
a = {"Vorname":"Hans", "Nachname":"Meier", "Alter":34, "Verheiratet":True}
if "Vorname" in a:
print("\"Vorname\" ist enthalten.")
else: # gleichbedeutend mit: if "Vorname" not in a
print("\"Vorname\" ist nicht enthalten.")
Element(e) zu einem Dictionary hinzufügen
► Python-Dokumentation: Mapping Types
In ähnlicher Weise, wie der Wert eines Schlüssels geändert werden kann, kann auch ein neues Schlüssel/Wert-Paar dem Dictionary hinzugefügt werden, wenn der angegebene Schlüssel nicht bereits existiert. Mit der Methode update können zwei Dictionarys verknüpft werden.
a = {"Vorname":"Hans", "Nachname":"Meier", "Alter":34, "Verheiratet":True}
a['Ort'] = "Buxtehude"
print(a)
b = {"Straße":"Hafenstraße", "Hausnummer":42, "PLZ":"21614", "Ort":"Buxtehude"}
a.update(b)
Element(e) aus einem Dictionary entfernen
► Python-Dokumentation: Mapping Types
Mit del wird das Element mit dem angegebenen Schlüssel aus einem Dictionary entfernt.
Mit pop() kann der Wert eines Schlüssels aus einem Dictionary extrahiert werden, wobei das Schlüssel/Wert-Paar anschließend aus dem Dictionary entfernt wird.
Um ein Dictionary zu leeren, ohne es dabei zu löschen, wird die Funktion clear() verwendet.
a = {"Vorname":"Hans", "Nachname":"Meier", "Alter":34, "Verheiratet":True}
del a["Verheiratet"]
print(a)
x = a.pop("Alter")
print(x)
print(a)
a.clear()
print(a)
Dictionary aktualisieren
► Python-Dokumentation: Mapping Types
Mit update() kann ein Dictionary um ein anderes Dictionary ergänzt werden. Bei diesem Vorgang werden die Werte übereinstimmender Schlüssel geändert und nicht vorhandene Schlüssel/Wert-Paare hinzugefügt.
a = {"Vorname":"Hans", "Nachname":"Meier", "Alter":34, "Verheiratet":True}
b = {"Nachname":"Lehmann", "Ort":"Buxtehude"}
a.update(b)
print(a)
View der Elemente erzeugen
► Python-Dokumentation: Mapping Types
Mit items() kann ein so genannter View eines Dictionarys erzeugt werden. Der View enthält eine Liste, deren Elemente Tupel aus Schlüssel und Werten des Dictionarys sind. Über diese Liste kann mit einer Schleife iteriert werden. Mit if/in kann das Vorhandensein eines Schlüssel/Wert-Paares geprüft werden.
Ändert sich das dem View zugrunde liegende Dictionary, so ändert sich der View ebenfalls automatisch.
a = {"Vorname":"Hans", "Nachname":"Meier", "Alter":34, "Verheiratet":True}
i = a.items()
for e in i:
print(e)
if ("Alter", 34) in i:
print("Alter:34 ist enthalten.")
else:
print("Alter:34 ist nicht enthalten.")
a["Alter"] = 35
print(i)
View der Schlüssel erzeugen
► Python-Dokumentation: Mapping Types
Mit keys() kann ein View der Schlüssel eines Dictionarys erzeugt werden. Der View enthält eine Liste, deren Elemente die Schlüssel des Dictionarys sind. Über diese Liste kann mit einer Schleife iteriert werden. Mit if/in kann das Vorhandensein eines Schlüssels geprüft werden.
Ändert sich das dem View zugrunde liegende Dictionary, so ändert sich der View ebenfalls automatisch.
a = {"Vorname":"Hans", "Nachname":"Meier", "Alter":34, "Verheiratet":True}
i = a.keys()
for e in i:
print(e)
if ("Alter") in i:
print("\"Alter\" ist enthalten.")
else:
print("\"Alter\" ist nicht enthalten.")
a["Ort"] = "Buxtehude"
print(i)
View der Werte erzeugen
► Python-Dokumentation: Mapping Types
Mit values() kann ein View der Werte eines Dictionarys erzeugt werden. Der View enthält eine Liste, deren Elemente die Werte des Dictionarys sind. Über diese Liste kann mit einer Schleife iteriert werden. Mit if/in kann das Vorhandensein eines Wertes geprüft werden.
Ändert sich das dem View zugrunde liegende Dictionary, so ändert sich der View ebenfalls automatisch.
a = {"Vorname":"Hans", "Nachname":"Meier", "Alter":34, "Verheiratet":True}
i = a.values()
for e in i:
print(e)
if ("Meier") in i:
print("\"Meier\" ist enthalten.")
else:
print("\"Meier\" ist nicht enthalten.")
a["Ort"] = "Buxtehude"
print(i)
Dictionarys vergleichen
► Python-Dokumentation: Mapping Types
Mit dem Operator == können zwei Dictionarys mit einander verglichen werden. Hierbei ist zu beachten, dass die Reihenfolge der Elemente des Dictionarys unerheblich ist. Lediglich die einzelnen Schlüssel/Wert-Paare werden verglichen.
a = {"Vorname":"Hans", "Nachname":"Meier", "Alter":34, "Verheiratet":True}
b = {"Vorname":"Hans", "Nachname":"Meier", "Alter":34, "Verheiratet":False}
c = {"Alter":34, "Nachname":"Meier", "Verheiratet":True, "Vorname":"Hans"}
if a == b:
print("a gleich b.")
else:
print("a ungleich b.")
if a == c:
print("a gleich c.")
else:
print("a ungleich c.")
Dictionary kopieren
Während durch den Operator = bei numerischen Variablen und Strings eine eigenständige Kopie einer Variable mit neuem Namen erzeugt wird, erzeugt der Operator bei Listen, Tupeln und Dictionarys lediglich eine Instanz. Das bedeutet, dass der Wert der Instanz sich auch dann ändert, wenn das ursprüngliche Objekt geändert wird. Dies wird durch folgendes Beispiel veranschaulicht:
a = {"Vorname":"Hans", "Nachname":"Meier", "Alter":34, "Verheiratet":True}
b = a
a["Vorname"] = "Paula"
print(b)
► Python-Dokumentation: copy
Um eine eigenständige Kopie eines Dictionarys zu erzeugen, kann die Methode deepcopy aus dem Modul copy verwendet werden. Hierbei werden auch bei enthaltenen Elementen, die selbst Listen, Tupel oder Dictionarys sind, Kopien und keine Instanzen erzeugt.
import copy
x = ["Schach", "Kochen", "Tanzen"]
a = {"Vorname":"Hans", "Nachname":"Meier", "Alter":34, "Verheiratet":True, "Hobbys":x}
b = copy.deepcopy(a)
a["Vorname"] = "Paula"
x[0] = "Halma"
print(b)
# alterative Methode (erzeugt aber keine Kopie der in a enthaltenen Liste x, sondern eine Instanz):
x = ["Schach", "Kochen", "Tanzen"]
a = {"Vorname":"Hans", "Nachname":"Meier", "Alter":34, "Verheiratet":True, "Hobbys":x}
b = {}
k = a.keys()
for e in k:
b[e] = a[e]
a["Vorname"] = "Paula"
x[0] = "Halma"
print(b)
Kleinsten bzw. größten Schlüssel finden
► Python-Dokumentation: min max
Mit Hilfe der Funktionen min() bzw. max() ist es möglich, innerhalb eines Dictionarys den Schlüssel mit der niedrigsten bzw. höchsten Position bei alphabetischer Sortierung zu ermitteln.
a = {"Vorname":"Hans", "Nachname":"Meier", "Alter":34, "Verheiratet":True}
print(min(a))
print(max(a))
Schlüssel addieren
► Python-Dokumentation: sum
Mit Hilfe der Funktion sum() können die einzelnen Schlüssel eines Dictionarys addiert werden, sofern es sich bei ihnen um Zahlen handelt. Ansonsten erzeugt diese Funktion einen TypeError.
a = {10:"Hans", 20:"Meier", 30:34, 40:True}
print(sum(a))