Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| gf_informatik:daten:processing:dictionaries [2022-06-22 12:33] – [Aufgabe 2: CSV in ein Dictionary einlesen] hof | gf_informatik:daten:processing:dictionaries [2025-06-16 08:57] (aktuell) – hof | ||
|---|---|---|---|
| Zeile 6: | Zeile 6: | ||
| Wie wir wissen, können wir in einem (sortierten) Wörterbuch (Diktionär) effizient suchen: | Wie wir wissen, können wir in einem (sortierten) Wörterbuch (Diktionär) effizient suchen: | ||
| - | * Der Suchbereich wird fortlaufend halbiert (s.a. Binäre Suche in [[gf_informatik: | + | * Der Suchbereich wird fortlaufend halbiert (s.a. Binäre Suche in [[gf_informatik: |
| * Bei $n$ Einträgen benötigt die Suche nach einem Element nur $log_2(n)$ Zugriffe, also | * Bei $n$ Einträgen benötigt die Suche nach einem Element nur $log_2(n)$ Zugriffe, also | ||
| * $10$ Zugriffe für $1024$ Elemente, | * $10$ Zugriffe für $1024$ Elemente, | ||
| * $20$ Zugriffe für $1024\cdot1024 \approx 1Mio$, | * $20$ Zugriffe für $1024\cdot1024 \approx 1Mio$, | ||
| * $30$ Zugriffe für $1024\cdot1024\cdot1024 \approx 1Mia$ | * $30$ Zugriffe für $1024\cdot1024\cdot1024 \approx 1Mia$ | ||
| + | |||
| ### Syntax | ### Syntax | ||
| Zeile 17: | Zeile 18: | ||
| * Ein Dictionary stellt eine Sammlung von `Schlüssel : Wert` Paaren dar (oder `key : value`). | * Ein Dictionary stellt eine Sammlung von `Schlüssel : Wert` Paaren dar (oder `key : value`). | ||
| * Erlaubt direkten Zugriff auf jedes Element mit dem gewünschten *Schlüssel*. | * Erlaubt direkten Zugriff auf jedes Element mit dem gewünschten *Schlüssel*. | ||
| - | * In Wahrheit benützt sie nicht binäre Suche, sondern eine noch schnellere Zugriffsart: | + | |
| + | | ||
| Ein leeres Dictionary wird mit geschweiften Klammern erzeugt: | Ein leeres Dictionary wird mit geschweiften Klammern erzeugt: | ||
| Zeile 32: | Zeile 34: | ||
| plz = zip_codes[' | plz = zip_codes[' | ||
| print(plz) | print(plz) | ||
| - | |||
| - | >>> | ||
| </ | </ | ||
| + | |||
| + | 8590 | ||
| Ein neues Element kann mit derselben Syntax angelegt werden - ist der Schlüssel bereits vorhanden, wird der Wert überschrieben: | Ein neues Element kann mit derselben Syntax angelegt werden - ist der Schlüssel bereits vorhanden, wird der Wert überschrieben: | ||
| Zeile 41: | Zeile 43: | ||
| zip_codes[' | zip_codes[' | ||
| print(zip_codes) | print(zip_codes) | ||
| - | |||
| - | >>> | ||
| </ | </ | ||
| + | |||
| + | {' | ||
| Mit dem `in` Schlüsselwort kann herausgefunden werden, ob ein Schlüssel im Dictionary vorhanden ist: | Mit dem `in` Schlüsselwort kann herausgefunden werden, ob ein Schlüssel im Dictionary vorhanden ist: | ||
| <code python> | <code python> | ||
| print(' | print(' | ||
| - | >>> True | + | </code> |
| + | True | ||
| + | |||
| + | <code python> | ||
| print(' | print(' | ||
| - | >>> | ||
| </ | </ | ||
| + | |||
| + | False | ||
| Wir können eine `for`-Schleife über die Keys in einem Dictionary schreiben: | Wir können eine `for`-Schleife über die Keys in einem Dictionary schreiben: | ||
| Zeile 58: | Zeile 64: | ||
| for town in zip_codes: | for town in zip_codes: | ||
| print(town) | print(town) | ||
| - | | ||
| - | >>> | ||
| - | >>> | ||
| - | >>> | ||
| </ | </ | ||
| + | |||
| + | Romanshorn | ||
| + | Egnach | ||
| + | Amriswil | ||
| Möchten wir in der Schleife sowohl Key als auch Value haben, verwenden wir die `items()` Funktion: | Möchten wir in der Schleife sowohl Key als auch Value haben, verwenden wir die `items()` Funktion: | ||
| Zeile 68: | Zeile 74: | ||
| for town, plz in zip_codes.items(): | for town, plz in zip_codes.items(): | ||
| print(plz, town) | print(plz, town) | ||
| - | | ||
| - | >>> | ||
| - | >>> | ||
| - | >>> | ||
| </ | </ | ||
| + | |||
| + | 8591 Romanshorn | ||
| + | 9322 Egnach | ||
| + | 8580 Amriswil | ||
| ### Aufgabe 1: Dictionary Syntax | ### Aufgabe 1: Dictionary Syntax | ||
| Zeile 78: | Zeile 84: | ||
| Schreibe Code wie die obigen Beispiele, um eine Sammlung von Postleitzahlen anzulegen. | Schreibe Code wie die obigen Beispiele, um eine Sammlung von Postleitzahlen anzulegen. | ||
| - | Wie müsste man vorgehen, wenn wir sowohl ein Mapping | + | Wie müsste man vorgehen, wenn wir sowohl ein Dictionary |
| ++++Antwort: | ++++Antwort: | ||
| Zeile 86: | Zeile 92: | ||
| ### Aufgabe 2: CSV in ein Dictionary einlesen | ### Aufgabe 2: CSV in ein Dictionary einlesen | ||
| - | Lies die Datei [[https:// | + | Lies die Datei [[https:// |
| Die Daten sehen so aus: | Die Daten sehen so aus: | ||
| Zeile 98: | Zeile 104: | ||
| </ | </ | ||
| - | Hinweis: | + | Hinweise: |
| * Die PLZ steht zuerst, also an `values[0]` | * Die PLZ steht zuerst, also an `values[0]` | ||
| * Der Ort ist an zweiter Stelle, also `values[1]` | * Der Ort ist an zweiter Stelle, also `values[1]` | ||
| - | * Wir wollen ein umgekehrtes Dictionary von Ortsnamen zu PLZ. | + | * Wir wollen ein **umgekehrtes** Dictionary von Ortsnamen zu PLZ. |
| - | * Ein Ortsnamen kann mehrere Postleitzahlen haben - wir möchten immer die erste behalten (also `1000` für Lausanne, nicht `1005`). | + | * Ein Ortsnamen kann mehrere Postleitzahlen haben - wir möchten immer die kleinste |
| + | <nodisp 1> | ||
| ++++Code| | ++++Code| | ||
| <code python> | <code python> | ||
| Zeile 121: | Zeile 128: | ||
| </ | </ | ||
| ++++ | ++++ | ||
| + | </ | ||
| + | |||
| ### Aufgabe 3: Zwei Datasets kombinieren | ### Aufgabe 3: Zwei Datasets kombinieren | ||
| Zeile 131: | Zeile 140: | ||
| ++++ | ++++ | ||
| - | < | + | < |
| ++++Lösung: | ++++Lösung: | ||
| <code python> | <code python> | ||
| Zeile 141: | Zeile 150: | ||
| ++++ | ++++ | ||
| </ | </ | ||
| + | |||
| + | ### Mehr zu Dictionaries | ||
| + | |||
| + | Du willst mehr über Dictionaries wissen und selber eines programmieren? | ||
| ### Nächstes Kapitel | ### Nächstes Kapitel | ||
| Weiter mit [[gf_informatik: | Weiter mit [[gf_informatik: | ||