Dictionaries in Python

Bei einem Dictionary handelt es sich um eine Datenstruktur. Sie ist einer Liste nicht unähnlich. Bei einer Liste haben die einzelnen Elemente — beginnend mit 0 — einen Index. Bei einem Dictionary ist ebenfalls eine Zuordnung (mapping) vorhanden. Und zwar dergestalt, dass einem Schlüssel (key) ein Wert (value) zugeordnet wird. Man spricht deswegen auch von einem Schlüssel-Wert-Paar (key-value-pair).

Tipp: Alle nachfolgend gezeigten Beispiele lassen sich sehr gut in der IDLE nachvollziehen.

Fangen wir mit einem leeren Dictionary an. Hierfür steht die Funktion dict() zur Verfügung:

>>> new_dict = dict()
>>> print(new_dict)
{}
>>> type(new_dict)
<class 'dict'>

Hier wurde ein leeres Dictionary mit der Bezeichnung „new_dict“ erzeugt. Anhand der Rückgabe von print(new_dict) kann man sehen, dass die Elemente eines Dictionaries in geschweiften Klammern ({ }) aufgeführt werden. Die Funktion type() habe ich lediglich zusätzlich aufgeführt, um zu demonstrieren, dass es sich tatsächlich um ein Dictionary handelt.

Alternativ zur Funktion dict(), kann man für die Erzeugung eines Dictionaries auch geschweifte Klammern nutzen:

>>> towns = {}

Dieses Dictionary soll jetzt Schlüssel-Wert-Paare (key-value-pairs) erhalten:

>>> towns['Spain'] = 'Madrid'
print(towns)
>>> {'Spain': 'Madrid'}

Das Land („Spain“) ist hier der Schlüssel; der dazugehörige Wert lautet „Madrid“. Freilich könnte man auch gleich ein Dictionary mit key-value-pairs erstellen:

>>> towns = {'Spain':'Madrid', 'England':'London', 'Italy':'Rom'}
>>> print(towns)
{'Spain': 'Madrid', 'England': 'London', 'Italy': 'Rom'}

Wie bei Listen, kann auch bei Dictionaries die Funktion len() angewendet werden, die die Anzahl der Paare zurückgibt:

>>> len(towns)
3

Ebenso kann der in-Operator in Bezug auf die Schlüssel angewendet werden:

>>> 'England' in towns
True

>>> 'Munich' in towns
False

Schauen wir uns als nächstes an, wie ein key-value-pair wieder entfernt werden kann. Anstatt einfach den entsprechenden Code zu zeigen, möchte ich die Funktion dir() einführen, mit der sich feststellen lässt, welche Methoden zur Verfügung stehen. Angewandt auf dict, sieht das Ergebnis folgendermaßen aus:

>>> dir(dict)
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', 
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', 
'__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', 
'__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
'__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 
'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 
'setdefault', 'update', 'values']

Uns interessieren nur alle Bezeichnungen ohne doppelte Unterstriche (__), mithin um die Methoden, also

'clear', 'copy', 'fromkeys', 'get', 'items', 'keys',
'pop', 'popitem', 'setdefault', 'update', 'values'

Für unser Vorhaben sieht die Methode pop am vielversprechendsten aus. Probieren wir es aus. Dabei ist zu beachten, dass für die Anwendung von Methoden die Punkt-Schreibweise (dot notation) verwendet wird:

>>> towns.pop('England')
>>> print(towns)
{'Spain': 'Madrid', 'Italy': 'Rom'}

Möchte man das komplette Dictionary leeren, kommt clear zur Anwendung:

>>> towns.clear()
>>> print(towns)
{}

Abschließend möchte ich noch zeigen, wie ein Dictionary durchlaufen werden kann, mithin wie eine Iteration aussieht. Dafür erstelle ich ein Dictionary, das den Anteil von Energiequellen an der Stromerzeugung (für das Jahr 2018) zum Inhalt hat. Bei den Werten handelt es sich dabei um Terrawattstunden (TWh).

power_sources = {'Coal': 10116, 'Oil': 903, 'Gas': 6091, 'Wind': 1217, 'Nuclear': 2724}

Zur Anwendung kommt eine for-Schleife. Die Schlüssel lassen sich mit

>>> for keys in power_sources:
            print(keys)

Coal
Oil
Gas
Wind
Nuclear

anzeigen.

Und für die Ausgabe der Schlüssel mit den dazugehörigen Werten kann die Methode items genutzt werden:

>>> for (key, value) in power_sources.items():
        print(key, value)

Coal 10116
Oil 903
Gas 6091
Wind 1217
Nuclear 2724

Unter Verwendung des tuple unpacking können die Schlüssel und die dazugehörigen Werte in zwei Tuple entpackt werden:

>>> power_sources = {'Coal': 10116, 'Oil': 903, 'Gas': 6091, 'Wind': 1217, 'Nuclear': 2724}
>>> source, value = zip(*power_sources.items())
>>> source
('Coal', 'Oil', 'Gas', 'Wind', 'Nuclear')
>>> value
(10116, 903, 6091, 1217, 2724)

Seit Python 3.9 existiert der Union Operator, um ein Dictionary zu aktualisieren oder zwei Dictionaries zu einem neuen Dictionary zusammenzuführen. Betrachten wir dazu folgendes Dictionary, das MacBook Pro Modelle und die dazugehörigen Identifier enthält:

mac_book_pro = {
            "15-inch, early 2018": "MacBookPro4,1",
            "15-inch, late 2018": "MacBookPro5,1",
            "13-inch, mid 2009": "MacBook Pro5,5",
            "15-inch, mid 2009": "MacBookPro5,3"}

Ein weiteres Modell könnte mit |= folgendermaßen hinzugefügt werden:

mac_book_pro |= {"17-inch, early 2009": "MacBookPro5,2"}

Das Dictionary mac_book_pro wird dadurch aktualisiert.

Und das Dictionary

mac_book = {"Retina, 12-inch 2017": "MacBook10,1"}

könnte unter Verwendung von | mit mac_book_pro zu einem neuen Dictionary mac_book_models zusammengeführt werden:

mac_book_models = mac_book | mac_book_pro

for (key, value) in mac_book_models.items():
    print(key, value)

Retina, 12-inch 2017 MacBook10,1
15-inch, early 2018 MacBookPro4,1
15-inch, late 2018 MacBookPro5,1
13-inch, mid 2009 MacBook Pro5,5
15-inch, mid 2009 MacBookPro5,3
17-inch, early 2009 MacBookPro5,2

Das waren sie also, die Grundlagen zu Dictionaries in Python. In einem späteren Artikel werde ich noch detaillierter auf dieses Thema eingehen.

Zuletzt aktualisiert am 7. Januar 2023