Python
Slovarji
Slovarji (dictionaries) so podatkovni tipi podobno kot
seznami (lists) z razliko, da naslavljajo vsebino s poljubnimi
vrednostmi, ne pa z zaporedno številko, kar je značilno za
sezname.
Spomnimo se seznamov. Seznam si lahko predstavljamo kot preslikavo
množice števil na množico vrednosti. Vzemimo primer seznama z
naslednjimi vrednostmi:
Tedaj je seznam preslikava števil 0,1,2 v te vrednosti
0 --> "rdec" 1 --> "zelen" 2 --> "moder"
|
Slovarji so bolj splošna oblika tega koncepta. Slovar
preslikava
množico ključev v množico vrednosti. V Pythonu izgleda to tako:
{ "ime" : "Janez Novak" , "starost" : 25, "telefon" : "555-6666", "naslov" : "Povsetova 138", "mesto" : "Ljubljana", "drzava" : "Slovenija", "zip" : "1000" }
|
Ta slovar preslikava ključe (na levi) v vrednosti (na desni):
"ime" --> "Janez Novak" "starost" --> 25 "telefon" --> "555-6666" "ulica" --> "Povsetova 138" "mesto" --> "Ljubljana" "drzava" --> "Slovenija" "zip" --> "1000"
|
Slovarje uporabljamo podobno kot sezname.
naslov = { "ime" : "Janez Novak","mesto" : "Ljubljana", "naslov" : "Povsetova 138"} print naslov["ime"] #izpise "Janez Novak" print naslov["mesto"] #izpise "Ljubljana" print udelezenec["ulica] #izpise "Povsetova 138" naslov["ulica"] = "Dolenjska cesta 5" print naslov["ulica"] #izpise "Dolenjska cesta 5"
|
V slovar lahko vnašamo nove vrednosti:
Slovarji so pripraven način za sledenje objektom, ki imajo imenovane
atribute (lastnosti), tako kot ljudje oziroma naslovi v zgornjih
primerih. Lahko bi sicer uporabljali kar seznam za sledenje istim
podatkom, kot na primer
naslov = ["Povsetova 138", "Ljubljana", "Slovenija"]
|
vendar bi morali paziti, kateri atribut je bil dodeljen v kateri
oštevilčeni "predalček" seznama. Uporaba slovarja zmanjša
možnost
človeške napake in tudi sicer olajša delo programerju.
Slovarji nudijo vrsto metod za rokovanje z njihovo vsebino. Metode
so v bistvu funkcije, "prilepljene" na posamezen slovar. Seznam teh
funkcij najdeš v spletnem priročniku Library Reference.
Metode uporabljamo na enak način, kot na primer uporabljamo
metodo "append" na seznamu ali metodo "read" na datoteki. Metoda
"append" je ena od metod seznamov (lists), metoda "read" ena od
metod datotek (files). Če torej hočemo uporabiti slovarjevo metodo
"keys" , bi morali napisati nekaj takega
kljuci = naslov.keys() for kljuc in kljuci: print "Kljucu", kljuc, "slovarja ustreza atribut", naslov[kljuc]
|
Naš program z imeni bi lahko dopolnili tako, da bi o vsakem
posamezniku pomnili še druge podatke, ne le njegovo ime
(tudi
naslov, morda e-mail naslov itd). Namesto imen posameznikov bi
v seznamu morali pomniti slovarje
(torej celotno skupino podatkov o posameznikih). Kako bi morali
predelati funkciji "dodajIme" in "izpisOseb" , prikazuje
naslednja koda:
def dodajIme( seznam ): novaOseba = {} print "Vpisi ime osebe" novaOseba["ime"] = raw_input() print "Vpisi ulico osebe", novaOseba["ime"] novaOseba["ulica"] = raw_input() print "Vnesi mesto osebe", novaOseba["ime"] novaOseba["mesto"] = raw_input() print "Vnesi drzavo osebe", novaOseba["ime"] novaOseba["drzava"] = raw_input() print "Vnesi postno stevilko osebe", novaOseba["oseba"] novaOseba["zip"] = raw_input() seznam.append(novaOseba)
def izpisOseb( seznam ): for oseba in seznam: print oseba["ime"] print oseba["ulica"] print oseba["mesto"], ",", oseba["drzava"], oseba["zip"] print
|
Težave se pojavijo, ko bi hoteli program tako spremeniti, da
bi seznam slovarjev pomnili na datoteko in nato tak seznam
slovarjev spet brali nazaj (doslej smo pomnili in brali le seznam imen,
torej seznam nizov). Z dosedanjim znanjem bi to izvedli precej
neelegantno. Nadaljevanje bo dalo pravi odgovor.