Ez a szakasz elmagyarázza, hogyan adhatunk új elemeket egy szótárhoz (dict típusú objektum), vagy hogyan frissíthetjük a Python meglévő elemének értékét. Több szótár összefűzése (összekapcsolása, egyesítése) is lehetséges.
- Elemek hozzáadása és frissítése a szótárhoz a kulcsok megadásával.
- Több szótár összefűzése (összevonása): frissítés (), | operátor, | = operátor
- Több elem hozzáadása vagy frissítése: update (), | = operátor
Elemek hozzáadása és frissítése a szótárhoz a kulcsok megadásával.
A szótárelemeket a következő módon adhatja hozzá / frissítheti.
Szótár objektum [kulcs] = érték
Ha nem létező kulcsot adunk meg, akkor egy új elem kerül hozzáadásra, és ha megadunk egy meglévő kulcsot, akkor a meglévő érték frissül (felülíródik).
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}
Ha nem szeretné frissíteni egy létező kulcs értékét, használja a setdefault () metódust.
Több szótár összefűzése (egyesítése): frissítés (), | operátor, | = operátor
update()
Ha egy másik szótárobjektum argumentumként van megadva a szótárobjektum metódusfrissítésében (), akkor annak minden eleme hozzáadódik.
Ha a kulcs átfedésben van egy meglévő kulccsal, akkor azt felülírják az argumentumban megadott szótár értékével.
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}
Hiba egy több szótár megadása az update () argumentumban.
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
Amint később kifejtettük, az update () új elemeket adhat kulcsszó argumentumokként (kulcs = érték), ezért csak vegye fel a ** szótárt a szótárba, és minden elemet bővítse ki kulcsszó argumentumként, és adja át.
d1.update(**d2, **d3)
print(d1)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}
Az előző példákhoz hasonlóan az update () használatával frissül az eredeti szótár objektum.
Ha több szótár összevonásával szeretne új szótárat létrehozni, használja a {** d1, ** d2} (a Python 3.5-ből) vagy a dict (** d1, ** d2) szót.
A Python 3.9 és újabb verzióiban új szótár létrehozása is lehetséges a | kezelő leírt legközelebb.
| operátor, | = operátor (Python 3.9 és újabb)
A Python 3.9 óta lehetséges két szótár egyesítése a | operátor. Ha két szótárnak ugyanaz a kulcsa, akkor a jobb oldali értéknek van prioritása.
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}
| Lehetőség van több szótár kombinálására is operátorok sorozatával.
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}
+ A frissítéshez () hasonlóan a bal oldalon lévő objektum is frissül.
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d1 |= d2
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
Több elem hozzáadása vagy frissítése: update (), | = operátor
update()
Ha az update () metódusban meg van adva a kulcsszó argumentum kulcs = érték, akkor hozzáadódik a kulcs kulcs és az érték. Ha a kulcs átfedésben van egy meglévő kulccsal, akkor azt felülírják az argumentumban megadott értékkel.
d = {'k1': 1, 'k2': 2}
d.update(k1=100, k3=3, k4=4)
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
Lehetőség van a (kulcs, érték) listájának megadására is a frissítés () metódus argumentumaként. Ha a kulcs átfedésben van egy meglévő kulccsal, akkor azt felülírják az argumentumként megadott értékkel.
d = {'k1': 1, 'k2': 2}
d.update([('k1', 100), ('k3', 3), ('k4', 4)])
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
A zip () függvénnyel kombinálva elemek hozzáadhatók a kulcsok listájából és az értékek listájából.
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}
| = operátor (Python 3.9 és újabb)
A | = operátorral a (kulcs, érték) listája megadható a jobb oldalon.
d = {'k1': 1, 'k2': 2}
d |= [('k1', 100), ('k3', 3), ('k4', 4)]
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
Vegye figyelembe, hogy a | -val listát kell megadni operátor hibát eredményez. Csak a szótár-szótár műveletek támogatottak.
# print(d | [('k1', 100), ('k3', 3), ('k4', 4)])
# TypeError: unsupported operand type(s) for |: 'dict' and 'list'