Elementen toevoegen aan een woordenboek en woordenboeken samenvoegen in Python

Bedrijf

In dit gedeelte wordt uitgelegd hoe in Python nieuwe elementen aan een woordenboek (object van het type dict) kunnen worden toegevoegd of de waarde van een bestaand element kan worden bijgewerkt. Het is ook mogelijk om meerdere woordenboeken samen te voegen (join, merge).

  • Voeg elementen aan het woordenboek toe en werk ze bij door sleutels op te geven.
  • Samenvoegen van meerdere woordenboeken:update(),| operator,|= operator
  • Meerdere elementen toevoegen of bijwerken:update(),|= operator

Voeg elementen aan het woordenboek toe en werk ze bij door sleutels op te geven.

Je kunt woordenboekelementen op de volgende manier toevoegen.

Woordenboek object [sleutel] = waarde

Wanneer een niet-bestaande sleutel wordt opgegeven, wordt een nieuw element toegevoegd, en wanneer een bestaande sleutel wordt opgegeven, wordt de bestaande waarde bijgewerkt (overschreven).

d = {'k1': 1, 'k2': 2}

d['k3'] = 3
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}

d['k1'] = 100
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3}

Als u de waarde van een bestaande sleutel niet wilt bijwerken, gebruik dan de methode setdefault().

Samenvoegen van meerdere woordenboeken: update(), | operator, |= operator

update()

Indien een ander woordenboekobject als argument wordt opgegeven voor de methode update() van het woordenboekobject, zullen al zijn elementen worden toegevoegd.

Als de sleutel overlapt met een bestaande sleutel, zal deze worden overschreven met de waarde van het woordenboek dat in het argument is opgegeven.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

d1.update(d2)
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Het is een fout om meerdere woordenboeken te specificeren in het update() argument.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}

# d1.update(d2, d3)
# TypeError: update expected at most 1 arguments, got 2

Zoals later uitgelegd, kan update() nieuwe elementen toevoegen als sleutelwoord-argumenten (sleutel=waarde), dus voeg gewoon ** toe aan het woordenboek en breid elk element uit als een sleutelwoord-argument en geef het door.

d1.update(**d2, **d3)
print(d1)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}

Net als in de vorige voorbeelden zal update() het oorspronkelijke dictionary object bijwerken.

Als u een nieuw woordenboek wilt genereren door meerdere woordenboeken samen te voegen, gebruikt u {**d1, **d2} (vanaf Python 3.5) of dict(**d1, **d2).

In Python 3.9 en later is het ook mogelijk om een nieuw woordenboek te maken met de hierna beschreven| operator.

| operator, |= operator (Python 3.9 en later)

Sinds Python 3.9 is het mogelijk om twee woordenboeken samen te voegen met behulp van de | operator. Wanneer twee woordenboeken dezelfde sleutel hebben, heeft de waarde aan de rechterkant voorrang.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

print(d1 | d2)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

print(d2 | d1)
# {'k1': 1, 'k3': 3, 'k4': 4, 'k2': 2}

|Het is ook mogelijk om meerdere woordenboeken te combineren door een reeks operatoren te gebruiken.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}

print(d1 | d2 | d3)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}

+Net als bij update() wordt het object aan de linkerkant bijgewerkt.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

d1 |= d2
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Meerdere elementen toevoegen of bijwerken: update(), |= operator

update()

Wanneer het sleutelwoordargument key=value wordt gespecificeerd in de update() methode, zal de sleutel key en waarde waarde worden toegevoegd. Indien de sleutel overlapt met een bestaande sleutel, zal deze overschreven worden met de waarde gespecificeerd in het argument.

d = {'k1': 1, 'k2': 2}

d.update(k1=100, k3=3, k4=4)
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Het is ook mogelijk om een lijst van (sleutel, waarde) op te geven als argument voor de update() methode. Als de sleutel overlapt met een bestaande sleutel, zal deze worden overschreven met de waarde die als argument is opgegeven.

d = {'k1': 1, 'k2': 2}

d.update([('k1', 100), ('k3', 3), ('k4', 4)])
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

In combinatie met de functie zip() kunnen elementen worden toegevoegd uit een lijst van sleutels en een lijst van waarden.

d = {'k1': 1, 'k2': 2}

keys = ['k1', 'k3', 'k4']
values = [100, 3, 4]

d.update(zip(keys, values))
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

|= operator (Python 3.9 en later)

Met de operator |= kan aan de rechterkant een lijst van (sleutel, waarde) worden gespecificeerd.

d = {'k1': 1, 'k2': 2}

d |= [('k1', 100), ('k3', 3), ('k4', 4)]
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Merk op dat het specificeren van een lijst met de | operator zal resulteren in een fout. Alleen dictionary-to-dictionary operaties worden ondersteund.

# print(d | [('k1', 100), ('k3', 3), ('k4', 4)])
# TypeError: unsupported operand type(s) for |: 'dict' and 'list'