Ta sekcja wyjaśnia, jak dodawać nowe elementy do słownika (obiektu typu dict) lub aktualizować wartość istniejącego elementu w Pythonie. Możliwe jest również konkatenowanie (łączenie, scalanie) wielu słowników.
- Dodawanie i aktualizowanie elementów do słownika poprzez podanie kluczy.
- Konkatenacja (łączenie) wielu słowników:update(),| operator,|= operator
- Dodaj lub zaktualizuj wiele elementów:update(),|= operator
Dodawanie i aktualizowanie elementów do słownika poprzez podanie kluczy.
Elementy słownika można dodawać w następujący sposób.
Obiekt słownikowy [klucz] = wartość
Gdy podany jest nieistniejący klucz, dodawany jest nowy element, a gdy podany jest istniejący klucz, istniejąca wartość jest aktualizowana (nadpisywana).
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}
Jeśli nie chcesz aktualizować wartości klucza, który istnieje, użyj metody setdefault().
Konkatenacja (łączenie) wielu słowników: update(), | operator, |= operator
update()
Jeśli jako argument metody update() obiektu słownika zostanie podany inny obiekt słownika, to wszystkie jego elementy zostaną dodane.
Jeśli klucz pokrywa się z istniejącym kluczem, zostanie on nadpisany wartością ze słownika podanego w argumencie.
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}
Błędem jest podanie wielu słowników w argumencie update().
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
Jak wyjaśniono później, update() może dodawać nowe elementy jako argumenty słowa kluczowego (klucz=wartość), więc po prostu dodaj ** do słownika i rozwiń każdy element jako argument słowa kluczowego i przekaż go.
d1.update(**d2, **d3)
print(d1)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}
Podobnie jak w poprzednich przykładach, użycie funkcji update() spowoduje aktualizację oryginalnego obiektu słownika.
Jeśli chcesz wygenerować nowy słownik przez połączenie wielu słowników, użyj {**d1, **d2}. (od Pythona 3.5) lub dict(**d1, **d2).
W Pythonie 3.9 i nowszych możliwe jest również utworzenie nowego słownika za pomocą opisanego dalej operatora|.
| operator, |= operator (Python 3.9 i nowszy)
Od wersji Pythona 3.9 możliwe jest łączenie dwóch słowników za pomocą operatora |. Gdy dwa słowniki mają ten sam klucz, wartość po prawej stronie ma pierwszeństwo.
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}
| Można również łączyć wiele słowników za pomocą szeregu operatorów.
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}
+Podobnie jak w przypadku update(), obiekt po lewej stronie jest aktualizowany.
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d1 |= d2
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
Dodaj lub zaktualizuj wiele elementów: update(), |= operator
update()
Kiedy w metodzie update() podany jest argument key=value, zostanie dodany klucz key i wartość value. Jeśli klucz pokrywa się z istniejącym kluczem, zostanie on nadpisany wartością podaną w argumencie.
d = {'k1': 1, 'k2': 2}
d.update(k1=100, k3=3, k4=4)
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
Możliwe jest również podanie listy (klucz, wartość) jako argumentu metody update(). Jeśli klucz pokrywa się z istniejącym kluczem, zostanie on nadpisany wartością podaną jako argument.
d = {'k1': 1, 'k2': 2}
d.update([('k1', 100), ('k3', 3), ('k4', 4)])
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
W połączeniu z funkcją zip(), elementy mogą być dodawane z listy kluczy i listy wartości.
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 i nowszy)
Za pomocą operatora |= można określić listę (klucz, wartość) po prawej stronie.
d = {'k1': 1, 'k2': 2}
d |= [('k1', 100), ('k3', 3), ('k4', 4)]
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
Zauważ, że określenie listy za pomocą operatora | spowoduje błąd. Obsługiwane są tylko operacje typu słownik-słownik.
# print(d | [('k1', 100), ('k3', 3), ('k4', 4)])
# TypeError: unsupported operand type(s) for |: 'dict' and 'list'