Dictionary

(Fortgeschrittene)

Die Grundlagen von den Wörterbüchern sind uns schon bekannt. Hier wollen wir nun die Details studieren.

Fortgeschrittene Techniken

Dictionary Anlegen

Überlicherweise werden die Wörterbücher wie folgt angelegt:

d = {'a': 1, 'b': 2, 'c': 3}

dict sind dynamische Datentypen. Wir können also leere Wörterbücher erzeugen und dann die Elemente hinzufügen.

d = {}
type(d)
dict

Das Key/Value Paar können wir mit der Synthax d[key]=value hinzufügen.

d['a']=1
d
{'a': 1}
d['b']=2
d['c']=3
d
{'b': 2, 'c': 3}

Wenn wir die Built-in Funktion verwenden wollen lautet die Synthax d(key1=value1,key2=value2,...) benutzen.

dict(a=1,b=2,c=3)
{'a': 1, 'b': 2, 'c': 3}

Dictionary sind geordnet¶

Wörterbücher sind geordnete Datentypen.

d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'a': 1, 'b': 2, 'c': 3}

Der Vergleichsoperator == zeigt das beide Wörterbücher dieselben Elemente in derselben Reihenfolgen enthalten.

d1 == d2
True
d1 = {'c': 1, 'b': 2, 'a': 3}
d2 = {'a': 1, 'b': 2, 'c': 3}

Sind die Elemente in den Wörterbüchern verschieden angeordnet, so zeigt der Vergleichsoperator == dass diese verschieden sind.

d1 == d2
False

Dictionary mit willkürlichen Objekten

Wörterbücher können verschiedenste Datentypen enthalten. Zum Beispiel können wir vier numerische Datentypen in einem Wörterbücher verwenden.

d1 = {'int': 1, 'float': 2.0, 'complex': 1+1j, 'boolean': True}
d1
{'int': 1, 'float': 2.0, 'complex': (1+1j), 'boolean': True}

Zugriff auf Wörterbuchwerte

Der Zugriff erfolgt einfach mit dem key.

d1 = {'a': 1, 'b': 2, 'c': 3}
d1['a']
1

Auch wenn der key eine Zahl ist, erfolgt der Zugriff in der gleichen Weise.

d1 = {0: 'a', 1: 'b', 2: 'c'}
d1[0]
'a'

Dict von Dicts

Wir können auch Wörterbücher von Wörterbüchern erzeugen.

d1 = {0: 'a', 1: 'b', 2: 'c'}
d2 = {24: 'x', 25: 'y', 26: 'z'}
d = {0: d1, 1: d2}
d
{0: {0: 'a', 1: 'b', 2: 'c'}, 1: {24: 'x', 25: 'y', 26: 'z'}}

Der Zugriff erfolgt mit d[key][key].

d[0][0]
'a'
d[1][24]
'x'

Verschachtelte Dicts¶

Auch eine Verschachtlung von Wörterbüchern ist möglich. Wie immer sollten wir mit solchen Konstruktionen vorsichtig sein.

d = {0: 'a', 1: {0: 'aa', 1: 'bb'}, 2: 'b'}
d[0]
'a'
d[1]
{0: 'aa', 1: 'bb'}
d[1][0]
'aa'

Dicts verändern¶

Da Wörterbücher dynamisch sind, können wir alle Werte verändern.

d = {'a': 0, 'b': 1, 'c': 2}
d['a'] = 10
d
{'a': 10, 'b': 1, 'c': 2}

Dictionary Methoden

Mit Hilfe von dir bekommen wir alle Attribute. Wir wollen nur Methoden selektieren.

dict_methods = [name for name in dir(dict) if name.islower() and name[0] !='_']
print(len(dict_methods))
print(dict_methods)
11
['clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

Name

Typ

Operation

Beschreibung

len()

Built-In

Länge des Wörterbuches

min()

Built-In

Element mit dem Schlüssel welches dem Minimum entspricht

max()

Built-In

Element mit dem Schlüssel welches dem Maximum entspricht

list()

Built-In

Erzeugt

Erzeugt ein Wörterbuch

update()

Built-In

Hinzufügen

Hinzufügen von Elementen

len()

Bemerkung

len(dictionary)
len(d)
3

min()

Bemerkung

min(dictionary)
min(d)
'a'

max()

Bemerkung

max(dictionary)
max(d)
2

fromkeys()

Die fromkeys() Methode erlaubt das Erstellen von

Bemerkung

d.update(<obj>)
keys = ['a','b','c']
dict.fromkeys(keys)
{'a': None, 'b': None, 'c': None}
dict.fromkeys(keys, 0)
{'a': 0, 'b': 0, 'c': 0}

update()

Die update() Methode erlaubt das Anhängen von Elementen. Auch das Verändern der Werte ist möglich. Seit Python3.9 können auch die Operatoren =| und | verwendet werden.

Bemerkung

d.update(<obj>)
d1 = {'a': 1, 'b': 2, 'c': 3}

Hinzufügen

d1.update(e=4,f=5)
d1
{'a': 1, 'b': 2, 'c': 3, 'e': 4, 'f': 5}
d1 |= {'g':6, 'h':7}
d1
{'a': 1, 'b': 2, 'c': 3, 'g': 6, 'h': 7}

Werte Ändern

d1.update([('a', -1),('b', -2)])
d1
{'a': -1, 'b': -2, 'c': 3, 'e': 4, 'f': 5, 'g': 6}
d1 |= {'a':1, 'b':2}
d1
{'a': 1, 'b': 2, 'c': 3, 'e': 4, 'f': 5, 'g': 6}
d1.update(a=-1, b=-2)
d1
{'a': -1, 'b': -2, 'c': 3, 'd': 4, 'e': 5}

Vereinigung

d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'c': 3, 'd': 4, 'e': 5}
d1.update(d2)
d1
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'c': 3, 'd': 4, 'e': 5}
d1 = d1 | d2
d1
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'c': 3, 'd': 4, 'e': 5}
d1 |= d2
d1
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

get()

Bemerkung

d.get(<key>[, <default>])
d1 = {'a': 1, 'b': 2, 'c': 3}
d1.get('a')
1
print(d1.get('z'))
None
d.get('z', -1)
-1

items()

Bemerkung

d.items()
list(d.items())
[('a', 1), ('b', 2), ('c', 3)]
list(d.items())[1][0]
'b'
list(d.items())[1][1]
2

keys()

Bemerkung

d.keys()
list(d.keys())
['a', 'b', 'c']

values()

Bemerkung

d.values()
list(d.values())
[1, 2, 3]

pop()

Bemerkung

d.pop(<key>[, <default>])
d.pop('b')
2
d
{'a': 1, 'c': 3}
# d.pop('z')
d.pop('z',-1)
-1

popitem()

Bemerkung

d.popitem()
d = {'a': 1, 'b': 2, 'c': 3}
d.popitem()
('c', 3)
d
{'a': 1, 'b': 2}
d.popitem()
('b', 2)
d
{'a': 1}

clear()

Bemerkung

d.clear()
d.clear()