Python Dictionary

Een dictionary in Python is een datatype waarin je meerdere datapunten op kunt slaan met key-value paren. Als data scientist kan je dit voor meerdere toepassingen gebruiken, bijvoorbeeld voor het opslaan van verschillende parametersettings voor een machine learning model.

Wie Python wil leren kan niet om dictionaries heen. In dit blog leer je in de volgende stappen alles over dictionaries:

Wat is een Python dictionary?

Letterlijk betekent dictionary woordenboek: in een woordenboek zoek je de betekenis van een bepaald woord op. Binnen een Python dictionary is dit vergelijkbaar: je zoekt de value (betekenis in woordenboek) van een key (woord in woordenboek) op.

Net als een list kan een dictionary een of meerdere elementen bevatten. Hierbij is een element een key-value (sleutel-waarde) paar.

Met een dictionary geef je duidelijke structuur aan je data waarmee de leesbaarheid van je code vergroot.

Met vertrouwen waardevolle inzichten halen uit data? Schrijf je in voor een van onze Python trainingen.


Een dictionary is op de volgende manier gekenmerkt:

  • De data (key-value paren) bevindt zich tussen accolades {}
  • Afzonderlijke key-value paren worden gescheiden met een komma (,)
  • Tussen de key en value staat een dubbele punt (:)
  • Keys moeten uniek zijn en kunnen niet gewijzigd worden
  • Values kunnen een diversiteit aan verschillende datatypes bevatten zoals integers, floats, lists en dictionaries

Onderstaande afbeelding toont de syntax voor het opstellen van een dictionary.

python dictionary uitleg

Aanmaken en verwijderen

We beginnen met het aanmaken van een leeg dictionary, door gebruik te maken van accolades. Met ingebouwde Python functie type() is te zien dat Python het datatype van de variabele direct herkent als een dictionary.

In [11]:
d = {}
print(type(d))
d
<class 'dict'>
Out[11]:
{}

Vervolgens kunnen we waarden aan het dictionary toevoegen. Dit doe je door vanuit de variabele binnen blokhaken de naam van de key te benoemen, en vervolgens de value te specificeren.

In [12]:
d['scenario_1'] = 100
d
Out[12]:
{'scenario_1': 100}

Hiermee is een eerste key-value paar toegevoegd aan het dictionary. Door binnen blokhaken de key te benoemen verkrijg je de value van een specifiek key-value paar.

In [13]:
d['scenario_1'] 
Out[13]:
100

Naast het toevoegen van individuele paren kun je een dictionary ook direct opstellen. Zie onderstaand voorbeeld waarin we 3 key-value paren aanmaken met waarden voor verschillende scenario’s.

In [15]:
d = {'scenario_1': 100,
     'scenario_2': 200,
     'scenario_3': 300}
d
Out[15]:
{'scenario_1': 100, 'scenario_2': 200, 'scenario_3': 300}

Zoals eerder aangegeven kan een dictionary verschillende soorten datatypes bevatten. In onderstaand voorbeeld zie je hoe we meer gegevens toevoegen aan de scenario’s, door van de values zelf weer dictionaries te maken.

In [16]:
d = {'scenario_1': {'max_iter': 100, 'solver': 'liblinear'},
     'scenario_2': {'max_iter': 200, 'solver': 'lbfgs'},
     'scenario_3': {'max_iter': 300, 'solver': 'lbfgs'}}
d
Out[16]:
{'scenario_1': {'max_iter': 100, 'solver': 'liblinear'},
 'scenario_2': {'max_iter': 200, 'solver': 'lbfgs'},
 'scenario_3': {'max_iter': 300, 'solver': 'lbfgs'}}

Met het commando del ben zijn key-value waarden te verwijderen. In onderstaand voorbeeld verwijderen we het key-value paar met key ‘scenario_3’.

In [17]:
d = {'scenario_1': {'max_iter': 100, 'solver': 'liblinear'},
     'scenario_2': {'max_iter': 200, 'solver': 'lbfgs'},
     'scenario_3': {'max_iter': 300, 'solver': 'lbfgs'}}
del d['scenario_3']
d
Out[17]:
{'scenario_1': {'max_iter': 100, 'solver': 'liblinear'},
 'scenario_2': {'max_iter': 200, 'solver': 'lbfgs'}}

Wanneer je alle key-value paren wilt verwijderen kun je methode .clear() toepassen. Dit resulteert in een leeg dictionary.

In [18]:
d = {'scenario_1': {'max_iter': 100, 'solver': 'liblinear'},
     'scenario_2': {'max_iter': 200, 'solver': 'lbfgs'},
     'scenario_3': {'max_iter': 300, 'solver': 'lbfgs'}}
d.clear()
d
Out[18]:
{}

Verkrijgen van data

Om waarden uit een dictionary te kunnen gebruiken moet je deze kunnen verkrijgen. Dit doe je uiteraard door gebruik te maken van de naam van een key-value paar. Eerder hebben we al gezien dat we met blokhaken een value kunnen opzoeken. Hier doen we dit voor de value van key ‘scenario_3’.

In [19]:
d = {'scenario_1': {'max_iter': 100, 'solver': 'liblinear'},
     'scenario_2': {'max_iter': 200, 'solver': 'lbfgs'},
     'scenario_3': {'max_iter': 300, 'solver': 'lbfgs'}}
d['scenario_3']
Out[19]:
{'max_iter': 300, 'solver': 'lbfgs'}

Omdat de value in dit dictionary zelf weer een dictionary is, kunnen we hierbinnen op dezelfde manier values verkrijgen. De waarde van key ‘solver’ in key ’scenario_3’ selecteer je als volgt:

In [20]:
d = {'scenario_1': {'max_iter': 100, 'solver': 'liblinear'},
     'scenario_2': {'max_iter': 200, 'solver': 'lbfgs'},
     'scenario_3': {'max_iter': 300, 'solver': 'lbfgs'}}
d['scenario_3']['solver']
Out[20]:
'lbfgs'

Om er zeker van te zijn of een dictionary een bepaalde key bevat, kun je dit controleren met de in vergelijking.

In [23]:
d = {'scenario_1': {'max_iter': 100, 'solver': 'liblinear'},
     'scenario_2': {'max_iter': 200, 'solver': 'lbfgs'},
     'scenario_3': {'max_iter': 300, 'solver': 'lbfgs'}}
print('solver' in d['scenario_3'])
print('random_state' in d['scenario_3'])
True
False

Aanpassen van data

Eerder hebben we aangegeven dat de keys niet aangepast kunnen worden, dit is omdat values hierdoor onvindbaar zouden kunnen worden. Values zelf zijn wel aan te passen. Dit doe je op vergelijkbare wijze als het verkrijgen van values. Door de key te benoemen binnen blokhaken en de nieuwe value te specificeren. In het volgende voorbeeld passen we de waarde van ‘max_iter’ aan in ‘scenario_3’.

In [24]:
d = {'scenario_1': {'max_iter': 100, 'solver': 'liblinear'},
     'scenario_2': {'max_iter': 200, 'solver': 'lbfgs'},
     'scenario_3': {'max_iter': 300, 'solver': 'lbfgs'}}
d['scenario_3'] = {'max_iter': 500, 'solver': 'lbfgs'}
d
Out[24]:
{'scenario_1': {'max_iter': 100, 'solver': 'liblinear'},
 'scenario_2': {'max_iter': 200, 'solver': 'lbfgs'},
 'scenario_3': {'max_iter': 500, 'solver': 'lbfgs'}}

Dit kunnen we ook doen door direct te specificeren:

In [25]:
d = {'scenario_1': {'max_iter': 100, 'solver': 'liblinear'},
     'scenario_2': {'max_iter': 200, 'solver': 'lbfgs'},
     'scenario_3': {'max_iter': 300, 'solver': 'lbfgs'}}
d['scenario_3']['max_iter'] = 500
d
Out[25]:
{'scenario_1': {'max_iter': 100, 'solver': 'liblinear'},
 'scenario_2': {'max_iter': 200, 'solver': 'lbfgs'},
 'scenario_3': {'max_iter': 500, 'solver': 'lbfgs'}}

Loop over key-value paren

Met een for loop kun je achtereenvolgens de verschillende key-value paren benaderen. Dit doe je met de .keys(), .values() en .items() methodes. Eerst bekijken we de keys met de .keys() methode en de values met de .values() methode.

In [31]:
d = {'scenario_1': {'max_iter': 100, 'solver': 'liblinear'},
     'scenario_2': {'max_iter': 200, 'solver': 'lbfgs'},
     'scenario_3': {'max_iter': 300, 'solver': 'lbfgs'}}
for key in d.keys():
    print(key)
for value in d.values():
    print(value)    
scenario_1
scenario_2
scenario_3
{'max_iter': 100, 'solver': 'liblinear'}
{'max_iter': 200, 'solver': 'lbfgs'}
{'max_iter': 300, 'solver': 'lbfgs'}

Vervolgens verkrijgen we zowel de keys als values met de .items() methode.

In [27]:
d = {'scenario_1': {'max_iter': 100, 'solver': 'liblinear'},
     'scenario_2': {'max_iter': 200, 'solver': 'lbfgs'},
     'scenario_3': {'max_iter': 300, 'solver': 'lbfgs'}}
for key, value in d.items():
    print(key, value)
scenario_1 {'max_iter': 100, 'solver': 'liblinear'}
scenario_2 {'max_iter': 200, 'solver': 'lbfgs'}
scenario_3 {'max_iter': 300, 'solver': 'lbfgs'}

In ons voorbeeld zijn de values zelf ook weer dictionaries. Door gebruik te maken van nested for loops kunnen we ook hierbinnen itereren.

In [29]:
d = {'scenario_1': {'max_iter': 100, 'solver': 'liblinear'},
     'scenario_2': {'max_iter': 200, 'solver': 'lbfgs'},
     'scenario_3': {'max_iter': 300, 'solver': 'lbfgs'}}
for key_i, value_i in d.items():
    for key_j, value_j in value_i.items():
        print(key_i, key_j, value_j)
scenario_1 max_iter 100
scenario_1 solver liblinear
scenario_2 max_iter 200
scenario_2 solver lbfgs
scenario_3 max_iter 300
scenario_3 solver lbfgs

Samenvatting

Je weet nu dat een dictionary een datatype is waarbinnen je op gestructureerd wijze een verzameling aan elementen op kunt slaan met key-value paren. Door de structuur vergroot je de leesbaarheid van je code. We hebben het aanmaken, verwijderen en wijzigen van dictionaries en key-value paren behandeld. Hierbij heb je gezien hoe je waarden verkrijgt en hoe je gebruik kunt maken van for loops om over elementen te itereren.

Zoals je merkt duurt Python leren helemaal niet zo lang en geeft het je veel meer flexibiliteit dan je in bijvoorbeeld Excel hebt. Wil jij je van data analyst naar data scientist ontwikkelen? Overweeg dan om met onze training mee te doen.

Met vertrouwen waardevolle inzichten halen uit data? Schrijf je in voor een van onze Python trainingen.


Wil jij snel op stoom zijn als data scientist en Python expert? Krijg in twee dagen vertrouwen in het analyseren van data met Python. Schrijf je in voor onze Python cursus voor data science en ontwikkel je onder begeleiding van ervaren trainers succesvol verder als data scientist.

by: