Dictionaries#
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.
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