Dictionaries#

video

Ein dictionary ist eine Sammlungen von Zuordnungen. Eine Zuordnung besteht darin, dass wir einem Schlüssel (key) einen Wert (value) zuordnen.

m = {'A':1, 'B':2, 'C':3}      # key : value

Keys sind eindeutig, d.h. es gibt keine 2 Zuordnungen in einem dictionary, die denselben key haben. Values können mehrfach vorkommen.

noten = {'Lena': 1, 'Max': 1, 'Tim': 2}          # values sind nicht eindeutig

Dictionaries können sehr schnell zu einem gegebenen key den gespeicherten value ermitteln. Die Typen für Keys müssen hashable sein. Das ist der Fall bei ints, floats, strings, tuples. Lists sind nicht hashable und können also nicht als keys in dictionaries verwendet werden. Der Typ der values ist beliebig.

Lookup, Update, Insert, Delete#

Zu einem key können wir den zugeordneten value ermitteln (Lookup).

noten = {'Lena': 2, 'Max': 1, 'Tim': 2}
noten['Lena'] 
2

Wir können den zugeordneten Wert verändern.

noten['Lena'] = 1
noten
{'Lena': 1, 'Max': 1, 'Tim': 2}

Wir können ein neues key-value Paar hinzufügen

noten['Malte'] = 3
noten
{'Lena': 1, 'Max': 1, 'Tim': 2, 'Malte': 3}

Wir können ein key-value Paar aus dem dictionary löschen

del noten['Max']
noten
{'Lena': 1, 'Tim': 2, 'Malte': 3}

Fehlersituationen: Wir nutzen einen key, der nicht vorhanden ist. Oder wir versuchen einen key zu löschen, der nicht vorhanden ist. Dies führt zu einer KeyError exception.

noten['Maike']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
Cell In[16], line 1
----> 1 noten['Maike']

KeyError: 'Maike'

Fehlersituation: Wir wollen einen key verwenden, der nicht hashable ist. Dies führt zu einer TypeError exception.

m = {[1,2]: 'A'}
 
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[19], line 1
----> 1 m = {[1,2]: 'A'}

TypeError: unhashable type: 'list'

Liste von keys, values, items erzeugen#

Wir können uns zu einem gegebenen dict Listen mit den keys, values und items erzeugen. Ein item ist ein zu einem Tupel zusammengefasstes key-value Paar.

m = {'Thorben':2, 'Soeren':3, 'Maike':2}
list(m.keys())
['Thorben', 'Soeren', 'Maike']
list(m.values())
[2, 3, 2]
list(m.items())
[('Thorben', 2), ('Soeren', 3), ('Maike', 2)]

Mit einer Schleife ein dict durchlaufen#

Wenn wir mit einer for-Schleife ein dict durchlaufen, dann laufen wir standardmäßig durch die keys.

m = {'Thorben':2, 'Soeren':3, 'Maike':2}
for x in m:                      # alle keys durchlaufen     
    print(x) 
Thorben
Soeren
Maike
for x in m.keys():               # wie oben: alle keys durchlaufen
    print(x) 
Thorben
Soeren
Maike
for x in m.values():             # alle values durchlaufen
    print(x)
2
3
2
for k,v in m.items():            # alle key-value Tupel durchlaufen mit unpacking
    print(k, v)
Thorben 2
Soeren 3
Maike 2

Datentypen für keys und values#

  • values: kann jeder Datentyp sein, auch doppelte Werte ok.

  • keys: müssen eindeutig sein, wir verwenden zunächst nur die immutable Typen: int, string, tuple (eigentliche Bedingung: die Typen müssen hashable sein). Insbesondere können Listen nicht als keys für dictionaries verwendet werden.

  • Seit Python 3.7 ist die Reihenfolge beim Durchlauf der Elemente die Einfügereihenfolge.

dict-Methoden (W3Schools)

Aufgaben#

'''
Aufgabe 1:
Erstelle ein dict m1, dass den Ländern 'England', 'Frankreich' und 'Italien' ihre Hauptstädte zuordnet.

>>> m1['England']
'London'

>>> m1['Frankreich']
'Paris'

>>> m1['Italien']
'Rom'
'''
# your code
'''
Aufgabe 2:
Erstelle ein dict m2, dass den Städten London, Paris und Rom ihre Länder zuordnet

>>> m2['London']
'England'

>>> m2['Paris']
'Frankreich'

>>> m2['Rom']
'Italien'
'''
# your code
'''
Aufgabe 3:
Erstelle ein dict m3, dass jeder Zahl in Zeile 1, die Zahl zuordnet, die unter ihr steht.

Zeile1:   3  10  12  101  25  17
         19   4   1   -4  99  17

>>> m3[3]
19

>>> m3[101]
-4
'''
# your code
'''
Aufgabe 4:
Erstelle ein dictionary m, das jedem kleinen Buchstaben seine Stelle im Alphabet zuordnet.
a -> 1, b -> 2, ... z -> 26. 
Erweitere das dict um folgende Einträge: ä -> 27, ö -> 28, ü -> 29, ß -> 30.

Teste ein paar Werte:
>>> m['c']
3
>>> m['o']
15
>>> m['ö']
28
'''
# your code