Python-dictionaries beheersen: aanmaken, manipuleren en geavanceerde technieken
Python Dictionary
Deze uitgebreide gids legt Python-dictionaries uit – hoe je ze aanmaakt, elementen benadert, toevoegt, verwijdert en ingebouwde methoden benut.
Video: Python-dictionaries voor key/value-paren opslaan
Python-dictionaries zijn ongerangschikte verzamelingen van sleutel/waarde-paren. Elke entry koppelt een unieke, onveranderlijke sleutel aan een waarde die van elk type kan zijn.
Een Python-dictionary aanmaken
Een dictionary definiëren is eenvoudig: plaats komma-gescheiden sleutel/waarde-paren tussen accolades {}. Sleutels moeten onveranderlijk zijn (strings, getallen, of tuples van onveranderlijke elementen) en uniek; waarden mogen elk datatype zijn en kunnen herhalen.
# lege dictionary
my_dict = {}
# dictionary met integer-sleutels
my_dict = {1: 'appel', 2: 'bal'}
# dictionary met gemengde sleutels
my_dict = {'naam': 'Jan', 1: [2, 4, 3]}
# met dict()
my_dict = dict({1:'appel', 2:'bal'})
# uit sequence van paren
my_dict = dict([(1,'appel'), (2,'bal')])
Alle bovenstaande benaderingen creëren dezelfde dictionary-structuur.
Elementen uit een dictionary benaderen
Dictionary-waarden worden opgehaald via hun sleutels, ofwel met vierkante haakjes [] of de get()-methode. Haakjes geven een KeyError als de sleutel ontbreekt; get() retourneert standaard None.
# get vs [] voor ophalen elementen
my_dict = {'naam': 'Jack', 'leeftijd': 26}
# Uitvoer: Jack
print(my_dict['naam'])
# Uitvoer: 26
print(my_dict.get('leeftijd'))
# Ontbrekende sleutel geeft None
print(my_dict.get('adres'))
# KeyError
print(my_dict['adres'])
Uitvoer
Jack 26 None Traceback (most recent call last): File "<string>", line 15, in <module> print(my_dict['adres']) KeyError: 'adres'
Dictionary-elementen wijzigen en toevoegen
Dictionaries zijn mutable. Toewijzen aan een bestaande sleutel werkt de waarde bij; toewijzen aan een nieuwe sleutel voegt een nieuwe entry toe.
# Dictionary-elementen wijzigen en toevoegen
my_dict = {'naam': 'Jack', 'leeftijd': 26}
# waarde bijwerken
my_dict['leeftijd'] = 27
# Uitvoer: {'leeftijd': 27, 'naam': 'Jack'}
print(my_dict)
# item toevoegen
my_dict['adres'] = 'Centrum'
# Uitvoer: {'adres': 'Centrum', 'leeftijd': 27, 'naam': 'Jack'}
print(my_dict)
Uitvoer
{'naam': 'Jack', 'leeftijd': 27} {'naam': 'Jack', 'leeftijd': 27, 'adres': 'Centrum'}
Elementen uit een dictionary verwijderen
Gebruik pop() om een specifieke sleutel te verwijderen en de waarde op te halen. popitem() verwijdert een willekeurig paar, clear() wist de hele dictionary. Het del-trefwoord kan individuele entries of de hele variabele verwijderen.
# Elementen uit een dictionary verwijderen
# dictionary aanmaken
kwadraten = {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# specifiek item verwijderen, retourneert waarde
# Uitvoer: 16
print(kwadraten.pop(4))
# Uitvoer: {1: 1, 2: 4, 3: 9, 5: 25}
print(kwadraten)
# willekeurig item verwijderen, retourneer (sleutel,waarde)
# Uitvoer: (5, 25)
print(kwadraten.popitem())
# Uitvoer: {1: 1, 2: 4, 3: 9}
print(kwadraten)
# alle items verwijderen
kwadraten.clear()
# Uitvoer: {}
print(kwadraten)
# dictionary zelf verwijderen
del kwadraten
# Gooit fout
print(kwadraten)
Uitvoer
16 {1: 1, 2: 4, 3: 9, 5: 25} (5, 25) {1: 1, 2: 4, 3: 9} {} Traceback (most recent call last): File "<string>", line 30, in <module> print(kwadraten) NameError: name 'kwadraten' is not defined
Python-dictionarymethoden
De onderstaande tabel geeft veelgebruikte dictionary-methoden en hun doeleinden. Vele worden in de volgende voorbeelden gedemonstreerd.
| Methode | Beschrijving |
|---|---|
| clear() | Verwijdert alle items uit de dictionary. |
| copy() | Retourneert een shallow copy van de dictionary. |
| fromkeys(seq[, v]) | Creëert nieuwe dictionary uit seq met elke sleutel op v (standaard None). |
| get(key[,d]) | Retourneert waarde voor key; bij afwezigheid d (standaard None). |
| items() | Retourneert een view van de (sleutel, waarde)-paren. |
| keys() | Retourneert een view van de sleutels. |
| pop(key[,d]) | Verwijdert key en retourneert waarde of d; KeyError als key ontbreekt en d niet gegeven. |
| popitem() | Verwijdert en retourneert willekeurig (sleutel, waarde)-paar; KeyError als dictionary leeg. |
| setdefault(key[,d]) | Retourneert waarde voor key; bij afwezigheid voegt key toe met waarde d (standaard None) en retourneert d. |
| update([other]) | Voegt of werkt sleutel/waarde-paren uit other bij, overschrijft bestaande sleutels. |
| values() | Retourneert een view van de waarden. |
Voorbeeldgebruik:
# Dictionary-methoden
cijfers = {}.fromkeys(['Wiskunde', 'Engels', 'Natuurkunde'], 0)
# Uitvoer: {'Engels': 0, 'Wiskunde': 0, 'Natuurkunde': 0}
print(cijfers)
for item in cijfers.items():
print(item)
# Uitvoer: ['Engels', 'Wiskunde', 'Natuurkunde']
print(list(sorted(cijfers.keys())))
Uitvoer
{'Wiskunde': 0, 'Engels': 0, 'Natuurkunde': 0} ('Wiskunde', 0) ('Engels', 0) ('Natuurkunde', 0) ['Engels', 'Wiskunde', 'Natuurkunde']
Python-dictionary-comprehension
Dictionary-comprehension biedt een beknopte syntax voor het bouwen van dictionaries uit iterables. Het volgt het patroon {sleutel: waarde for element in iterable}.
# Dictionary Comprehension
kwadraten = {x: x*x for x in range(6)}
print(kwadraten)
Uitvoer
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
Equivalente imperatieve versie:
kwadraten = {}
for x in range(6):
kwadraten[x] = x*x
print(kwadraten)
Uitvoer
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
Comprehensions mogen meerdere lussen en if-filters bevatten. Voorbeeld: alleen oneven kwadraten.
# Dictionary Comprehension met if-conditie
oneven_kwadraten = {x: x*x for x in range(11) if x % 2 == 1}
print(oneven_kwadraten)
Uitvoer
{1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
Meer over dictionary-comprehensions: Python Dictionary Comprehension.
Overige dictionary-bewerkingen
Dictionary-lidmaatschapstest
Gebruik de in-operator om te controleren of een sleutel bestaat; het inspecteert geen waarden.
# Lidmaatschapstest voor Dictionary-sleutels
kwadraten = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# Uitvoer: True
print(1 in kwadraten)
# Uitvoer: True
print(2 not in kwadraten)
# lidmaatschapstest alleen voor sleutel, niet waarde
# Uitvoer: False
print(49 in kwadraten)
Uitvoer
True True False
Itereren door een dictionary
Itereer direct over sleutels, haal daarna waarden op.
# Itereren door een Dictionary
kwadraten = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
for i in kwadraten:
print(kwadraten[i])
Uitvoer
1 9 25 49 81
Dictionary ingebouwde functies
Standaardfuncties als all(), any(), len() en sorted() worden veel toegepast op dictionaries.
| Functie | Beschrijving |
|---|---|
| all() | True als elke sleutel evalueert naar True (of dictionary leeg is). |
| any() | True als enige sleutel True evalueert; False voor lege dictionary. |
| len() | Aantal sleutel/waarde-paren. |
| cmp() | Vergelijkt twee dictionaries (verwijderd in Python 3). |
| sorted() | Retourneert een gesorteerde lijst van sleutels. |
Voorbeelden:
# Dictionary Ingebouwde Functies
kwadraten = {0: 0, 1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# Uitvoer: False
print(all(kwadraten))
# Uitvoer: True
print(any(kwadraten))
# Uitvoer: 6
print(len(kwadraten))
# Uitvoer: [0, 1, 3, 5, 7, 9]
print(sorted(kwadraten))
Uitvoer
False True 6 [0, 1, 3, 5, 7, 9]
Python
- Python Datatypes onder de knie krijgen: Een praktische gids
- Python Operators onder de knie krijgen: Een uitgebreide gids
- Python Pass Statement onder de knie krijgen: Een praktische gids
- Python Functie-argumenten onder de knie krijgen: Positionele, Keyword en Default Parameters
- Python-iterators: hoe ze werken en hoe je je eigen maakt
- Python-closures uitgelegd: hoe geneste functies variabelen vangen
- Python datetime beheersen: praktische gids voor datums, tijden en tijdzones
- Python Overzicht: Hoog-Niveau, Leesbaar, Interactief & Object-Georiënteerd
- Python Numbers: Immutable Numerieke Datatypes Begrijpen
- Python Strings Beheersen: Aanmaken, Benaderen en Manipuleren
- Python Tuples Beheersen: Definitie, Gebruik en Verschillen met Lists