Zanurkuj w Pythonie/Słowniki

Z Wikibooks, biblioteki wolnych podręczników.

Słowniki[edytuj]

Jednym z wbudowanych typów są słowniki (ang. dictionary). Określają one wzajemną relację między kluczem a wartością.

Definiowanie słowników[edytuj]

Przykład. Definiowanie słowników
>>> d = {"server":"mpilgrim", "database":"master"}   #(1)
>>> d
{'database': 'master', 'server': 'mpilgrim'}
>>> d["server"]                                      #(2)
'mpilgrim'
>>> d["database"]                                    #(3)
'master'
>>> d["mpilgrim"]                                    #(4)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
KeyError: 'mpilgrim'
  1. Najpierw utworzyliśmy nowy słownik z dwoma elementami i przypisaliśmy go do zmiennej d. Każdy element w słowniku jest parą klucz-wartość, a zbiór elementów jest ograniczony nawiasem klamrowym.
  2. 'server' jest kluczem, a skojarzoną z nim wartością jest 'mpilgrim', do której odwołujemy się poprzez d["server"].
  3. 'database' jest kluczem, a skojarzoną z nim wartością jest 'master', do której odwołujemy się poprzez d["database"].
  4. Możesz dostać się do wartości za pomocą klucza, ale nie możesz dostać się do klucza za pomocą wartości. Tak więc d["server"] zwraca 'mpilgrim', ale wywołanie d["mpilgrim"] sprawi, że zostanie rzucony wyjątek, ponieważ 'mpilgrim' nie jest kluczem słownika d.

Modyfikowanie słownika[edytuj]

Przykład. Modyfikowanie słownika
>>> d
{'database': 'master', 'server': 'mpilgrim'}
>>> d["database"] = "pubs"                              #(1)
>>> d
{'database': 'pubs', 'server': 'mpilgrim'}
>>> d["uid"] = "sa"                                     #(2)
>>> d
{'database': 'pubs', 'uid': 'sa', 'server': 'mpilgrim'}
  1. Klucze w słowniku nie mogą się powtarzać. Przypisując wartość do istniejącego klucza, będziemy nadpisywać starszą wartość.
  2. W każdej chwili możesz dodać nową parę klucz-wartość. Składnia jest identyczna do tej, która modyfikuje istniejącą wartość. Czasami może to spowodować pewien problem. Możemy myśleć, że dodaliśmy nową wartość do słownika, ale w rzeczywistości nadpisaliśmy już istniejącą.

Zauważmy, że słownik nie przechowuje kluczy w sposób posortowany. Wydawałoby się, że klucz 'uid' powinien się znaleźć za kluczem 'server', ponieważ litera s jest wcześniej w alfabecie niż u. Jednak tak nie jest. Elementy słownika znajdują się w losowej kolejności.

Pracując ze słownikami pamiętajmy, że wielkość liter kluczy ma znaczenie.

Przykład. Nazwy kluczy są wrażliwe na wielkość liter
>>> d = {}
>>> d["klucz"] = "wartość"
>>> d["klucz"] = "inna wartość"                          #(1)
>>> d
{'klucz': 'inna wartość'}
>>> d["Klucz"] = "jeszcze inna wartość"                  #(2)
>>> d
{'klucz': 'inna wartość', 'Klucz': 'jeszcze inna wartość'}
  1. Przypisując wartość do istniejącego klucza zamieniamy starą wartość na nową.
  2. Nie jest to przypisanie do istniejącego klucza, a ponieważ łańcuchy znaków w Pythonie są wrażliwe na wielkość liter, dlatego też 'klucz' nie jest tym samym co 'Klucz'. Utworzyliśmy nową parę klucz-wartość w słowniku. Obydwa klucze mogą się wydawać podobne, ale dla Pythona są zupełnie inne.
Przykład. Mieszanie typów danych w słowniku
>>> d
{'bazadanych': 'pubs', 'serwer': 'mpilgrim', 'uid': 'sa'}
>>> d["licznik"] = 3                                                        #(1)
>>> d
{'bazadanych': 'pubs', 'serwer': 'mpilgrim', 'licznik': 3, 'uid': 'sa'}
>>> d[42] = "douglas"                                                       #(2)
>>> d
{42: 'douglas', 'bazadanych': 'pubs', 'serwer': 'mpilgrim', 'licznik': 3, 'uid': 'sa'}
  1. Słowniki nie są przeznaczone tylko dla łańcuchów znaków. Wartość w słowniku może być dowolnym typem danych: łańcuchem znaków, liczbą całkowitą, obiektem, a nawet innym słownikiem. W pojedynczym słowniku wszystkie wartości nie muszą być tego samego typu; możemy wstawić do niego wszystko, co chcemy.
  2. Klucze w słowniku są bardziej restrykcyjne, ale mogą być łańcuchami znaków, liczbami całkowitymi i kilkoma innymi typami. Klucze wewnątrz jednego słownika nie muszą posiadać tego samego typu.

Usuwanie pozycji ze słownika[edytuj]

Przykład. Usuwanie pozycji ze słownika
>>> d
{'licznik': 3, 'bazadanych': 'master', 'serwer': 'mpilgrim', 42: 'douglas', 'uid': 'sa'}
>>> del d['42']                                                                               #(1)
>>> d
{'licznik': 3, 'bazadanych': 'master', 'serwer': 'mpilgrim', 'uid': 'sa'}
>>> d.clear()                                                                               #(2)
>>> d
{}
  1. Instrukcja del każe usunąć określoną pozycję ze słownika, która jest wskazywana przez podany klucz.
  2. Instrukcja clear usuwa wszystkie pozycje ze słownika. Zbiór pusty ograniczony przez nawiasy klamrowe oznacza, że słownik nie ma żadnego elementu.

Materiały dodatkowe[edytuj]