Vorlesung 6

Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
VORLESUNG 6:
DICTIONARIES
MATTHIAS BIEG
1 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
SORTIEREN VON
LISTEN
2 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
DIE BUILT-IN FUNKTION SORTED()
Mit Hilfe der Funktion sorted(list, key=None,
reverse=None) werden Listen sortiert
Die Funktion gibt eine sortierte Liste zurück
Die Argumente der Funktion sorted haben folgende
Bedeutung:
Argument Beschreibung
3 of 32
list
die zu sortierende Liste
key
callback Funktion, die die Listenelemente
modifiziert, sodass das Sortieren auf den
modifizierten Werten stattfindet
reverse
Boolscher Parameter. Wenn True, dann
wird die Liste in revertierter Sortierordnung
zurückgegeben
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
SORTIEREN VON LISTEN: BEISPIELE
Sortieren einer numerischen Liste
>>> l = [3,1,2,4,3]
>>> l_sorted = sorted(l)
>>> l_sorted
[1,2,3,3,4]
Sortieren einer Liste von numerischen Listen
>>> l = [[3, 2], [1, 3], [2, 1]]
>>> l_sorted = sorted(l)
>>> l_sorted
[[1, 3], [2, 1], [3, 2]]
Sortieren einer Liste von numerischen Listen nach dem
zweiten Listenelement
>>> def f(l):
... return l[1]
...
>>> l_sorted = sorted(l, key=f)
>>> l_sorted
[[2, 1], [3, 2], [1, 3]]
4 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
DICTIONARIES:
INTRO
5 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
WAS SIND
DICTIONARIES?
Ein dictionary in python ist - wie Listen in python - ein
Containerdatentyp, in den man alle möglichen
Pythonobjekte ablegen kann
Der Unterschied zu Listen besteht in der Art und Weise,
wie man auf die abgelegten Elemente zugreift
6 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
WAS SIND
DICTIONARIES
Elementzugriff Listen: Funktioniert über einen integer
Schlüssel
>>> l = [1,2,3,4,5]
>>> print(str(l[1])) # Zugriff auf Listenelement mit Schlüssel 1
2
Elementzugriff Dictionaries: Funktioniert über einen
beliebiges Pythonobjekt als Schlüssel, meistens werden
jedoch Strings verwendet. Die Schlüssel können vom
Programmierer frei gewählt werden
>>> # Dictionary, das Namen auf Nummern abbildet
>>> dict1 = {"Carl": 219837982, "Heinz": 5489503804}
>>> # Elementzugriff über den Namen "Heinz"
>>> print(str(dict1["Heinz"]))
5489503804
7 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
DICTIONARIES:
BASICS
8 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
ERSTELLEN UND ZUWEISEN VON
DICTIONARIES
Die Syntax eines Dictionary Eintrags ist Schlüssel: Wert,
wobei sowohl Schlüssel als auch Wert beliebige
Pythonobjekte sein können
Dictionaries sind von geschweiften Klammern { }
eingerahmt
Schema
dict1 = {Schlüssel1: Wert1, ..., Schlüsseln: Wertn}
Beispiel
>>> dict1 = {} # Leeres Dictionary
>>> dict2 = {"Carl": 219837982, "Heinz": 5489503804}
>>> dict1, dict2
({}, {"Carl": 219837982, "Heinz": 5489503804})
9 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
ZUGRIFF AUF WERTE IN DICTIONARIES
Um ein Dictionary zu "durchblättern", kann man einfach
über alle seine Schlüssel iterieren
>>> dict1 = {"Carl": 219837982, "Heinz": 5489503804}
>>> for schlüssel in dict1.keys():
...
print(schlüssel, str(dict1[schlüssel]), sep=" ", end="\n")
...
Carl 219837982
Heinz 5489503804
Um auf einzelne Elemente zuzugreifen, benutzt man den
Klammeroperator, der schon aus Listenelementzugriffen
bekannt ist
>>> dict1 = {"Carl": 219837982, "Heinz": 5489503804}
>>> print(str(dict1["Carl"]))
219837982
Der Zugriff auf einen bestimmten Wert erfolgt also über
einen Schlüssel!
10 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
ZUGRIFF AUF NICHT EXISTENTE
ELEMENTE
Wenn wir auf ein Element zugreifen wollen, für das kein
Schlüssel existiert, wird ein Fehler zurückgegeben
>>> dict1 = {"Carl": 219837982, "Heinz": 5489503804}
>>> dict1["Sean"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Sean'
Um zu überprüfen, ob ein Dictionary einen bestimmten
Schlüssel enthält benutzen wir die Operatoren in und
not in
>>> dict1 = {"Carl": 219837982, "Heinz": 5489503804}
>>> "Carl" in dict1
True
>>> "Sean" not in dict1
True
11 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
EINFÜGEN NEUER ELEMENTE IN
BESTEHENDE DICTIONARIES
Um ein neues Schlüssel: Wert Paar in ein exisiterendes
Dictionary einzufügen genügt folgende Zuweisung
>>> dict1[Schlüssel] = Wert
>>> dict1 = {"Carl": 219837982, "Heinz": 5489503804}
>>> dict1
{'Heinz': 5489503804, 'Carl': 219837982}
>>> dict1["Sean"] = 32894732984
>>> dict1
{'Heinz': 5489503804, 'Sean': 32894732984, 'Carl': 219837982}
Wenn der Schlüssel schon existiert, wird sein vorheriger
Wert überschrieben
>>> dict1
{"Carl": 219837982, "Heinz": 5489503804}
>>> dict1["Carl"] = 110
>>> dict1
{"Carl": 110, "Heinz": 5489503804}
12 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
LÖSCHEN VON GESAMTEN
DICTIONARIES ODER ELEMENTEN
DAVON
Typischerweise löscht man keine gesamten Dictionaries
Es ist üblicher einzelne Element zu löschen, oder den
gesamten Inhalt eine Dictionaries zu enfernen, so dass
ein leeres Dictionary zurückbleibt
Wenn man dennoch ein gesamtes Dictionary löschen
möchte kann man die del Anweisung benutzen
Beispiele
>>>
>>>
>>>
>>>
13 of 32
del dict1["Sean"]
dict1.clear()
del dict1
dict1.pop("Sean")
#
#
#
#
Entferne den Eintrag mit Schlüssel "Sean"
Entferne alle Einträge aus dict1
Lösche das gesamte Dictionary
Entferne den Eintrag "Sean" und gebe ihn zurück
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
DICTIONARY TYPE
OPERATOREN
14 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
STANDARD TYP OPERATOREN
Alle Standardtyp Operatoren sind auch definiert für
Dictionaries
Standardtypoperatoren
15 of 32
Operator
Beschreibung
Wert
<
Kleiner als
bool
>
Grösser als
bool
<=
Kleiner gleich
bool
>=
Grösser gleich
bool
==
Ist gleich
bool
!=
Ungleich
bool
<>
Ungleich
bool
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
STANDARD TYP OPERATOREN
Beispiele
>>> dict1 = {'abc':
>>> dict2 = {'abc':
>>> dict3 = {'abc':
>>> dict4 = {'xyz':
>>> dict3 > dict4
True
>>> (dict1 < dict3)
True
>>> (dict2 < dict3)
True
>>> dict3 < dict4
False
16 of 32
123}
456}
123, 98.6: 37}
123}
and (dict1 < dict4)
and (dict2 < dict4)
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
DICTIONARY
VERGLEICHSALGORITHMUS
I) VERGLEICHE DIE LÄNGEN DER DICTIONARIES
Wenn die Längen der Dictionaries unterschiedlich sind,
dann gilt:
dict1 > dict2 == True, wenn len(dict1) > len(dict2)
dict1 < dict2 == True, wenn len(dict2) < len(dict1)
17 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
DICTIONARY
VERGLEICHSALGORITHMUS
II) VERGLEICHE DIE SCHLÜSSEL DER DICTIONARIES
Wenn die Längen der Dictionaries gleich sind, werden
ihre Schlüssel paarweise miteinander verglichen
Die Reihenfolge in der die Schlüssel miteinander
verglichen werden ist die, in der die Schlüssel mit der
Methode dict.keys() zurückgegeben werden
Das erste Schlüsselpaar (Schlüssel1, Schlüssel2), das
nicht gleich ist entscheidet wie der Vergleich zwischen
den Dictionaries evaluiert. Es gilt:
dict1 > dict2 == True, wenn Schlüssel1 > Schlüssel2
dict1 < dict2 == True, wenn Schlüssel1 < Schlüssel2
18 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
DICTIONARY
VERGLEICHSALGORITHMUS
III) VERGLEICHE DIE WERTE DER DICTIONARIES
Wenn die Längen der Dictionaries gleich sind, und deren
Schlüssel gleich sind, werden die Werte für passende
Schlüssel der beiden Dictionaries paarweise miteinander
verglichen
Das erste Wertepaar (dict1[Schlüssel], dict2[Schlüssel]),
das nicht gleich ist, entscheidet wie der Vergleich
zwischen den Dictionaries evaluiert. Es gilt:
dict1 > dict2 == True, wenn dict1[Schlüssel] >
dict2[Schlüssel]
dict1 < dict2 == True, wenn dict1[Schlüssel] <
dict2[Schlüssel]
19 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
DICTIONARY
VERGLEICHSALGORITHMUS
IV) GLEICHHEIT
Wenn die Dictionaries die gleiche Länge haben, gleiche
Schlüssel und für alle Schlüssel die gleichen Werte
besitzen, erfüllen die Dictionaries exakte Gleichheit und
es gilt:
dict1 == dict2 == True
20 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
DICTIONARY TYP OPERATOREN
Der einzige Operator, der spezifisch ist für Dictionary
Typen, ist der "key-lookup" Operator
Dieser ist sehr ähnlich gegenüber dem "single-element
slice" Operator für Sequenztypen
Für einen Sequenztyp greift man über einen Index auf
Werte zu, für einen Dictionary Typ greift man über einen
Schlüssel auf einen Wert zu
Der "key-lookup" Operator kann für die Zuweisung und
den Zugriff von Werten benutzt werden
>>> dict1[Schlüssel1] = Wert1 # Wert Zuweisung
>>> dict1[Schlüssel1]
# Wert Zugriff
21 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
DICTIONARY TYP
BUILT-IN METHODEN
22 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
ZUGRIFF AUF SCHLÜSSEL UND WERTE:
KEYS(),, VALUES()
KEYS()
VALUES(),, ITEMS()
Die Methoden keys(), values(), und items() werden
benutzt, um auf die Schlüssel und Werte von
bestehenden Dictionaries zuzugreifen.
>>> dict1 = {"Carl": 219837982, "Heinz": 5489503804}
>>> dict1.keys()
# Zugriff auf Schlüssel
['Heinz', 'Carl']
>>> dict1.values() # Zugriff auf Werte
[5489503804, 219837982]
>>> dict1.items() # Zugriff auf Schlüssel-Wert Paare
[('Heinz', 5489503804), ('Carl', 219837982)]
>>> for Key in dict1.keys():
... print("dict1 Key: ", Key, "; dict1 Value: ", str(dict1[Key]))
...
dict1 Key: Heinz; dict1 Value: 5489503804
dict1 Key: Carl; dict1 Value: 219837982
Die keys() Methode ist sehr nützlich, wenn man in
Verbindung einer for-Schleife alle Werte eines
Dictionaries extrahieren möchte
23 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
ZUGRIFF AUF SCHLÜSSEL UND WERTE:
KEYS(),, VALUES()
KEYS()
VALUES(),, ITEMS()
Die Methode keys() gibt eine Liste aller Schlüssel eines
existierenden Dictionaries in ungeordneter Reihenfolge
zurück!
Um auf die Werte eines Dictionaries in geordneter
Schlüsselreihenfolge zuzugreifen, müssen die Schlüssel
zuerst mit der built-in Methode sorted() sortiert werden
>>> dict1 = {"Carl": 219837982, "Heinz": 5489503804}
>>> for Key in sorted(dict1.keys()):
... print("dict1 Key: ", Key, "; dict1 Value: ", str(dict1[Key]))
...
dict1 Key: Carl; dict1 Value: 219837982
dict1 Key: Heinz; dict1 Value: 5489503804
24 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
AKTUALISIEREN EINES DICTIONARIES:
UPDATE()
Um ein Dictionary mit einem anderen Dictionary zu
aktualisieren kann die update() Methode verwendet
werden.
Alle existierenden Werte mit schon existierenden
Schlüssel werden überschrieben mit den neuen Werten
Nicht existierende Werte werden hinzugefügt
>>> dict1 = {"Carl": 219837982, "Heinz": 5489503804}
>>> dict2 = {"Carl": 110, "Sean": 32894732984}
>>> dict1.update(dict2)
>>> dict1
{'Heinz': 5489503804, 'Sean': 32894732984, 'Carl': 110}
25 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
ZUGRIFF AUF WERTE: GET() UND
SETDEFAULT()
Die Methoden get() , und setdefault() , können - ähnlich
dem key-lookup Operator [] dazu benutzt werden, um auf
Werte eines bestimmten Schlüssels zuzugreifen.
Der Unterschied besteht darin, dass get(Key, Value)
einen Standard Wert Value zurückgibt, falls der
Schlüssel Key nicht existiert
setdefault(Key, Value) erschafft zusätzlich einen neuen
Eintrag mit dem Schlüssel Key und dem Wert Value ,
falls kein Eintrag mit dem Schlüssel Key existiert
Wird der Wert Value in den Methoden get und setdefault
nicht explizit gesetzt, so ist dieser standardmässig auf
None gesetzt!
26 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
ZUGRIFF AUF WERTE: GET() UND
SETDEFAULT()
Beispiel
>>> dict1 = {"Carl": 219837982, "Heinz": 5489503804}
>>> dict1.get("Police", 110) # Zugriff mit get()
110
>>> dict1
{'Heinz': 5489503804, 'Carl': 219837982}
>>> dict1.setdefault("Police", 110) # Zugriff mit setdefault()
>>> dict1
{'Heinz': 5489503804, 'Police': 110, 'Carl': 219837982}
27 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
DICTIONARY BUILT-IN METHODEN:
ÜBERBLICK
28 of 32
Methode
Beschreibung
dict.clear()
Entfernt alle Elemente von dict
dict.get(key,
value)
Gibt den Wert für den Schlüssel key
zurück, falls er existiert, ansonsten wird
der Wert value zurückgegeben
dict.items()
Gibt eine Liste aller Schlüssel: Wert
Paare von dict zurück
dict.keys()
Gibt eine Liste aller Schlüssel von dict
zurück
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
DICTIONARY BUILT-IN METHODEN:
ÜBERBLICK
29 of 32
Methode
Beschreibung
dict.pop(key,
value)
Entfernt den Wert mit Schlüssel
key aus dict und gibt diesen
zurück. Falls der Schlüssel key
nicht existiert wird value
zurückgegeben. Ist value nicht
angegeben wird eine KeyError
Ausnahme geworfen.
dict.setdefault(key,
value)
Gibt den Wert für den Schlüssel
key zurück, falls er existiert,
ansonsten wird der Wert value
zurückgegeben und der Wert value
für den Schlüssel key in das
dictionary dict geschrieben.
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
DICTIONARY BUILT-IN METHODEN:
ÜBERBLICK
Methode
Beschreibung
dict.update(dict2) Fügt die Schlüssel: Wert Paare aus
Dictionary dict2 dem Dictionary dict
hinzu.
dict.values()
30 of 32
Gibt alle Werte aus dict in einer Liste
zurück.
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
ENDE GUT ALLES
GUT
31 of 32
17.11.2015 09:18
Vorlesung 6: Dictionaries
file:///home/fran/tmp/matze/dkfz/projects/python-lecture/lecture06/lecture06.html?print-pdf
ZUSAMMENFASSUNG
Listen können mit der built-in Funktion sorted() sortiert
werden
Dictionaries sind - ähnlich wie Listen Containerdatentypen, in denen verschieden Elemente
verschiedener Python Datentypen abgelegt werden
können
Im Unterschied zu Listen erfolgt der Zugriff von
Dictionary Elementen über einen vom Programmierer
vordefinierten Schlüssel
Somit gibt es eine vom Programmierer festgelegte
Relation zwischen einem Schlüssel und einem Wert
32 of 32
17.11.2015 09:18