
ŹRÓDŁO : http://szgrabowski.kis.p.lodz.pl/Python-podstawy.html
Słowniki.
To jedna z fajniejszych rzeczy w Pythonie: bardzo wygodna w obsłudze tablica asocjacyjna (inne funkcjonujące nazwy: słownik, hash, mapa...). W odróżnieniu od zwykłych tablic (czyli np. znanej nam już listy w Pythonie), do elementów tablicy asocjacyjnej odwołujemy się przez klucz, który może być dość dowolnego typu. W zwykłej tablicy elementy były indeksowane kolejnymi intami – tu jest wolna amerykanka. Klasyczne zastosowanie to książka telefoniczna:
ksiazka_tel = {} # te klamerki oznaczają słownik, typ dict
ksiazka_tel["Hamlet"] = 619433156
ksiazka_tel["Ofelia"] = 539991474
print ksiazka_tel["Ofelia"]
print ksiazka_tel["Horacy"] # klucz nieznany!
ksiazka_tel["Borewicz"] = 997
for (k, v) in ksiazka_tel.items(): # k-key, v-value (oczywiście można nazwać inaczej)
print k, "ma telefon o numerze", vAle najprościej wyświetlić cały słownik po prostu tak:
ksiazka_tel # albo print ksiazka_tel, jeśli nie w trybie interaktywnym
Borewicz dostał służbową komórkę? No to zmieniamy:
ksiazka_tel["Borewicz"] = 617555321 print ksiazka_tel["borewicz"] # ops, błąd! Małe i duże litery rozróżnialne
Sprawdźmy, czy w międzyczasie Horacy nie dorobił się telefonu:
if "Horacy" in ksiazka_tel:
print "Już jest! Jego numer to", ksiazka_tel["Horacy"]Tu nam się nie udało, ale zmieńmy Horacego np. na Hamleta.
Czy w obrębie jednego słownika mogą być klucze (a także skojarzone wartości) różnych typów? Pachnie szaleństwem, ale tak!
Wypróbuj przykłady, żebyś dobrze zapamiętał, czego nie powinieneś robić:
ksiazka_tel[(255,0,0)] = "czerwony" ksiazka_tel["W tym szaleństwie jest metoda"] = True ksiazka_tel[608] = [60801, 60804, 60802, 60899]
Czasem od razu chcemy słownik czymś zainicjować. Najprościej tak:
kolory = { "czerwony": (255,0,0), "niebieski": (0,0,255), "zielony": (0,255,0), "biały": (255,255,255) }Powiedzmy, że mamy także słownik
kolory2 = {"czerwony": (200, 0,0), "czarny": (0,0,0)}Chcemy zaktualizować stary słownik; robi się to tak:
kolory.update(kolory2)
Sprawdź, że nic ze słownika kolory nie wypadło, natomiast zmieniła się (została nadpisana) wartość skojarzona z kluczem „czerwony”, a także doszedł klucz „czarny”. Oczywiście kolory2 się nie zmienił.
Oto przykłady dalszych metod, które możemy wywołać dla słownika d:
d.keys() // zwraca listę kluczy d.values() # zwraca listę kluczy d.clear() # czyści cały słownik (ale zmiennej d nie usuwa) d.copy() # zwraca kopię d (d_kopia = d.copy() tworzy „niezależną” kopię, d_kopia = d byłoby tylko skopiowaniem referencji i każda zmiana d pociągałaby zmianę d_kopia)
Usunięcie klucza "abc":
del d["abc"] # KeyError, jeśli próbujemy usunąć coś, czego w słowniku nie ma
Co jeszcze warto wiedzieć? Wartościami (ale nie kluczami) słownika mogą być nawet inne słowniki. Utwórzmy więc coś, co można by szumnie nazwać małą obiektową bazą danych:
znajomi = { "Wojtek": { "tel": 487133, "miasto": "Zgierz", "ulica": "Zachlapana 14" }, \
"Ola": { "tel": 604111265, "miasto": "Opole", "ulica": "Krótka 1" }, \
"Sebastian": { "tel": 608726122, "miasto": "Tarnowskie Góry", "ulica": "Knutha 34" } }
print znajomi["Ola"]["miasto"]

Offline