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 [2023-06-10 20:25] – hof | gf_informatik:daten:processing:dictionaries [2026-04-27 06:02] (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, | ||
| Zeile 18: | 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 25: | Zeile 26: | ||
| </ | </ | ||
| Alternativ können auch bereits Einträge von der Form `key : value` eingetragen werden: | Alternativ können auch bereits Einträge von der Form `key : value` eingetragen werden: | ||
| - | <code python> | + | <bottom-editor autorun id=" |
| zip_codes = { ' | zip_codes = { ' | ||
| - | </code> | + | </bottom-editor> |
| Auf ein bestimmtes Element kann über *eckige* Klammern und den Schlüssel (*key*) zugegriffen werden. Die Syntax ist die gleiche wie beim Listenzugriff, | Auf ein bestimmtes Element kann über *eckige* Klammern und den Schlüssel (*key*) zugegriffen werden. Die Syntax ist die gleiche wie beim Listenzugriff, | ||
| - | <code python> | + | <bottom-editor autorun id=" |
| plz = zip_codes[' | plz = zip_codes[' | ||
| print(plz) | print(plz) | ||
| - | </code> | + | </bottom-editor> |
| - | + | ||
| - | 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: | ||
| - | <code python> | + | <bottom-editor autorun id=" |
| zip_codes[' | zip_codes[' | ||
| zip_codes[' | zip_codes[' | ||
| - | print(zip_codes) | + | print(zip_codes)</ |
| - | </code> | + | |
| - | + | ||
| - | {' | + | |
| 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> | + | <bottom-editor autorun id=" |
| print(' | print(' | ||
| - | </ | ||
| - | |||
| - | True | ||
| - | |||
| - | <code python> | ||
| print(' | print(' | ||
| - | </code> | + | </bottom-editor> |
| - | + | ||
| - | 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: | ||
| - | <code python> | + | <bottom-editor autorun id=" |
| for town in zip_codes: | for town in zip_codes: | ||
| print(town) | print(town) | ||
| - | </code> | + | </bottom-editor> |
| - | Romanshorn | + | Möchten wir in der Schleife sowohl Key als auch Value haben, verwenden wir die `items()` Funktion. Jedes _item_ ist ein _Tuple_ mit zwei Werten, dem _key_ und dem _value_. |
| - | Egnach | + | <bottom-editor autorun id=" |
| - | Amriswil | + | |
| - | + | ||
| - | Möchten wir in der Schleife sowohl Key als auch Value haben, verwenden wir die `items()` Funktion: | + | |
| - | <code python> | + | |
| for town, plz in zip_codes.items(): | for town, plz in zip_codes.items(): | ||
| print(plz, town) | print(plz, town) | ||
| - | </code> | + | </bottom-editor> |
| - | + | ||
| - | 8591 Romanshorn | + | |
| - | 9322 Egnach | + | |
| - | 8580 Amriswil | + | |
| ### Aufgabe 1: Dictionary Syntax | ### Aufgabe 1: Dictionary Syntax | ||
| Zeile 83: | Zeile 64: | ||
| 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 108: | Zeile 89: | ||
| * Ein Ortsnamen kann mehrere Postleitzahlen haben - wir möchten immer die kleinste behalten (also `1000` für Lausanne, nicht `1005`). | * Ein Ortsnamen kann mehrere Postleitzahlen haben - wir möchten immer die kleinste behalten (also `1000` für Lausanne, nicht `1005`). | ||
| - | <nodisp 1> | + | <bottom-exercise hidesolution id=" |
| - | ++++Code| | + | <script type=" |
| - | <code python> | + | def load_zip_codes(): |
| + | """ | ||
| + | mit key Gemeindename und value Postleitzahl.""" | ||
| + | |||
| + | |||
| + | </ | ||
| + | <script type=" | ||
| + | assert str(load_zip_codes()[' | ||
| + | assert str(load_zip_codes()[' | ||
| + | assert str(load_zip_codes()[' | ||
| + | </ | ||
| + | <script type=" | ||
| def load_zip_codes(): | def load_zip_codes(): | ||
| zip_codes = {} | zip_codes = {} | ||
| Zeile 124: | Zeile 116: | ||
| pass | pass | ||
| return zip_codes | return zip_codes | ||
| - | </code> | + | </script> |
| - | ++++ | + | </bottom-exercise> |
| - | </nodisp> | + | |