Dodawanie elementów do słownika i łączenie słowników w Pythonie

Biznes

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'