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
© Copyright 2025 ExpyDoc