Słowniki (dictionary)

Stronę tą wyświetlono już: 291 razy

Słowniki to tak zwane listy asocjacyjne, które cechują się tym, że nie są indeksowane tak jak listy tylko i wyłącznie kolejnymi liczbami całkowitymi, ale mogą być indeksowane liczbami zmiennoprzecinkowymi lub tekstem.

Tworzenie pustego słownika

Istnieje kilka sposobów na utworzenie pustego słownika, oto pierwszy z nich:

Listing 1
  1. slownik = dict()

i drugi:

Listing 2
  1. slownik = {}

Inicjalizacja słownika z elementami

Oto przykład utworzenia słownika z przypisaniem mu elementów:

Listing 3
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. print(slownik)

Wynik działania:

{'Arek': 3000, 'Ania': 1200, 'Ola': 1300}

Warto zauważyć, że elementy zostały wyświetlone w zupełnie innej kolejności niż zostały dodane do słownika.

Tworzenie słownika z dwóch list

Oto przykład utworzenia słownika z wykorzystaniem dwóch list i funkcji zip:

Listing 4
  1. imiona = ["Ania", "Ola", "Arek"]
  2. zarobki = [1200, 1300, 3000]
  3. slownik = dict(zip(imiona, zarobki))
  4. print(slownik)

Wynik działania:

{'Arek': 3000, 'Ola': 1300, 'Ania': 1200}

Odwoływanie się do pojedynczego elementu słownika

Poprzez klucz:

Listing 5
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. print(slowanik["Ania"])

Wynik działania:

1200

Za pomocą metody wewnętrznej get:

Listing 6
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. print(slownik.get("Ania"))
  3. print(slownik.get("Damian"))
  4. print(slownik.get("Damian","brak wpisu"))

Wynik działania:

1200
None
brak wpisu

Iterowanie po słowniku

Słowniki są jak najbardziej iterowalne, a więc można zrobić coś takiego:

Listing 7
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. for i in slownik:
  3. print(i)

Wynik działania:

Arek
Ola
Ania

Jak widać, w trakcie iterowania dobraliśmy się do indeksów słownika, natomiast nie uzyskaliśmy informacji o zawartości, która się tam znajduje. Tę zawartość można uzyskać w dwojaki sposób:

Listing 8
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. for i in slownik:
  3. print("{i}:{value}".format(i=i,value = slownik[i]))

Wynik działania:

Arek:3000
Ola:1300
Ania:1200

Choć powyższy kod działa poprawnie, to każdy szanujący się pythonauta powie: tak się nie robi! Więc zróbmy to tak, jak się to robi, czyli:

Listing 9
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. for key, value in slownik.items():
  3. print("{key}:{value}".format(key = key, value = value))

Wynik będzie taki sam co poprzednio.

Uaktualnianie danych w słowniku za pomocą metody wewnętrznej update

Metoda update wstawia dodatkowe wpisy do słownika a jeżeli dany klucz wpisu istnieje, to uaktualnia zawartość tego wpisu.

Listing 10
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. slownik.update({"Ania":2000,"Damian":4500})
  3. print(slownik)

Wynik działania:

{'Arek': 3000, 'Ania': 2000, 'Ola': 1300, 'Damian': 4500}

Dodawanie wpisu, gdy ten nie występuje w słowniku za pomocą metody wewnętrznej setdefault.

Oto jak można dodać element do słownika, gdy ten nie występuje:

Listing 11
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. slownik.setdefault("Arek",3300)
  3. print(slownik)
  4. slownik.setdefault("Damian",4500)
  5. print(slownik)

Wynik działania:

{'Arek': 3000, 'Ania': 2000, 'Ola': 1300}
{'Arek': 3000, 'Ania': 2000, 'Ola': 1300, 'Damian': 4500}

Sprawdzanie, czy podany klucz istnieje w słowniku za pomocą in.

Listing 12
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. if "Ania" in slownik:
  3. print("Ania jest w słowniku!")
  4. else:
  5. print("Ani nie ma w słowniku!")

Wynik działania:

Ania jest w słowniku!

Sprawdzanie, czy podany klucz i wartość istnieje w słowniku za pomocą in.

Listing 13
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. if ("Ania", 1200) in slownik.items():
  3. print("Tak Ania zarabia 1200 $!")
  4. else:
  5. print("Ani nie ma w słowniku, albo nie zarabia 1200 $!")

Wynik działania:

Tak Ania zarabia 1200 $!

Sprawdzanie, czy dana wartość istnieje w słowniku za pomocą in.

Listing 14
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. if 1200 in slownik.values():
  3. print("Tak, ktoś tu zarabia 1200 $!")
  4. else:
  5. print("Nikt tu nie zarabia 1200 $!")

Wynik działania:

Tak, ktoś tu zarabia 1200 $!

Usuwanie elementu słownika.

Za pomocą metody wewnętrznej pop można usunąć wpis w słowniku o podanym kluczu z jednoczesnym zwróceniem samej wartości kryjącej się pod tymże kluczem:

Listing 15
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. if "Ania" in slownik:
  3. print(slownik.pop("Ania"))
  4. print(slownik)
  5. else:
  6. print("Nie ma takiego klucza w słowniku")

Wynik działania:

1200
{'Arek': 3000, 'Ola': 1300}

Za pomocą metody wewnętrznej popitem można usunąć ostatni wpis słownika z jednoczesnym zwróceniem klucza i wartości w postaci krotki:

Listing 16
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. if "Ania" in slownik:
  3. print(slownik.popitem())
  4. print(slownik)
  5. else:
  6. print("Nie ma takiego klucza w słowniku")

Wynik działania:

('Arek', 3000)
{'Ania': 1200, 'Ola': 1300}

Czyszczenie słownika za pomocą metody wewnętrznej clear:

Listing 17
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. slownik.clear()
  3. print(slownik)

Wynik działania:

{}

Tworzenie kopii słownika za pomocą metody wewnętrznej copy:

Listing 18
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. slownik2 = slownik.copy()
  3. slownik3 = slownik
  4. slownik.clear()
  5. print(slownik)
  6. print(slownik3)
  7. print(slownik2)

Wynik działania:

{}
{}
{'Arek': 3000, 'Ania': 1200, 'Ola': 1300}

Liczba elementów znajdujących się w słowniku:

Sposób pierwszy za pomocą funkcji len:

Listing 19
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. print(len(slownik))

Wynik działania:

3

Drugi sposób, za pomocą wewnętrznej metody __len__:

Listing 20
  1. slownik = {"Ania":1200, "Ola":1300, "Arek":3000}
  2. print(slownik.__len__())

Komentarze