8 min lexim
Fjalorët: çelës dhe vlerë
Kërkimi me emër, jo me numër
Një listë i gjen njësitë me pozicion: nxenesit[2] është i treti. Kjo shkon kur pozicioni ka kuptim, por shpesh nuk ka. Nëse do të dish çmimin e një kafeje ose numrin e telefonit të një dyqani, të numërosh deri te një indeks numerik është e sikletshme. Do ta kërkosh me një emër.
Një fjalor (dictionary) e bën pikërisht këtë. Ruan çifte, secili i bërë nga një çelës me të cilin kërkon dhe një vlerë që merr mbrapsht. E shkruan me kllapa gjarpërore, dhe dy pika mes çdo çelësi dhe vlerës së tij:
cmimet = {"kafe": 120, "caj": 90, "uje": 50}
Për të lexuar një vlerë, e indekson me çelësin e saj në vend të një numri:
print(cmimet["kafe"]) # 120
Çelësat këtu janë vargje, por një çelës mund të jetë edhe numër ose tuple. Ajo që duhet të jetë vërtet një çelës është i pandryshueshëm deri në fund: një tuple me numra ose vargje punon, ndërsa një tuple me një listë brenda jo, sepse lista brenda mund të ndryshojë ende. Vlerat mund të jenë çfarëdo: numra, vargje, madje lista ose fjalorë të tjerë.
Shtimi, ndryshimi dhe heqja
Një fjalor është i ndryshueshëm (mutable), ndaj rritet e ndryshon lirisht. Shton një çift të ri duke i dhënë vlerë një çelësi që ende nuk është aty, dhe ndryshon një vlerë ekzistuese duke i dhënë vlerë një çelësi që është:
cmimet["leng"] = 150 # shton një çift të ri
cmimet["caj"] = 100 # ndryshon një vlerë ekzistuese
del cmimet["uje"] # heq çiftin për "uje"
Një kurth i shpeshtë është leximi i një çelësi që nuk ekziston. cmimet["qumesht"] nuk kthen bosh; nxjerr një KeyError dhe e ndal programin. Mund të mbrohesh nga kjo në dy mënyra të pastra:
print("qumesht" in cmimet) # False, një test i sigurt po/jo
print(cmimet.get("qumesht", 0)) # 0, një vlerë e paracaktuar kur çelësi mungon
Fjala in pyet nëse një çelës është i pranishëm. Metoda .get() merr një vlerë, por të lejon të emërosh një rrugëdalje për rastin kur çelësi mungon, kështu programi vazhdon të ecë në vend që të rrëzohet.
Ecja nëpër një fjalor
Të ciklosh mbi një fjalor të jep çelësat e tij, dhe nga çdo çelës arrin te vlera. Kjo të lejon të vizitosh çdo çift me radhë:
for njesi in cmimet:
print(njesi, "kushton", cmimet[njesi])
Nëse të interesojnë vetëm vlerat, cmimet.values() t'i jep drejtpërdrejt; cmimet.keys() bën të njëjtën për çelësat. Megjithatë, shpesh të mjafton thjesht të ciklosh mbi vetë fjalorin dhe të indeksosh mbrapsht.
Një shembull i punuar: numërimi i fjalëve
Fjalorët janë vegla e natyrshme sa herë të duhet të numërosh gjëra. Le të themi se do të numërosh sa herë shfaqet çdo fjalë në një fjali. Çelësi është fjala; vlera është numri i saj në rritje:
def numero_fjalet(fjalia):
numri = {}
for fjala in fjalia.split():
if fjala in numri:
numri[fjala] = numri[fjala] + 1
else:
numri[fjala] = 1
return numri
print(numero_fjalet("tavolina tavolina karrige raft tavolina"))
Kjo shtyp {'tavolina': 3, 'karrige': 1, 'raft': 1}. Ndiq logjikën: split() e copëton fjalinë në një listë fjalësh, dhe për çdo fjalë ose e rrit një numër që ekziston tashmë ose nis një të freskët në 1. E njëjta metodë .get() mund ta shkurtojë mesin:
numri[fjala] = numri.get(fjala, 0) + 1
Ai rresht i vetëm lexohet "numri i vjetër, ose 0 nëse është hera e parë, plus një". Numërimi me një fjalor është një model që do ta përdorësh sërish e sërish.
Kujdes
Leximi i një çelësi që mungon me kllapa katrore nxjerr një KeyError dhe e ndal programin. Kur nuk je i sigurt se një çelës është aty, testo me in më parë ose merre me .get() dhe një vlerë të paracaktuar. Ky është gabimi më i shpeshtë me fjalorët.
Do ta shohësh të shpjeguar? Ja leksioni i regjistruar i Code for Albania për këtë temë.
Provoje tani
Ndërto një fjalor cmimet me tri njësi dhe çmimet e tyre, si shembulli i kafesë. Shto një njësi të katërt duke i dhënë vlerë një çelësi të ri. Pastaj shtyp cmimet.get("qumesht", 0) për një njësi që nuk e shtove, dhe verifiko se kthen 0 në vend që të rrëzohet. Sapo ushtrove edhe shtimin e një çifti edhe kërkimin e sigurt.
Provo veten
- Një listë i gjen njësitë me pozicion numerik; një fjalor i gjen me çelës. Jep një shembull të përditshëm ku kërkimi me çelës është qartë më i përshtatshëm, dhe thuaj pse.
- Cili është ndryshimi në sjellje mes
cmimet["qumesht"]dhecmimet.get("qumesht", 0)kur çelësi"qumesht"nuk është në fjalor? - Në shembullin e numërimit të fjalëve, çfarë pune bën dega
else, dhe çfarë do të shkonte keq nëse do ta fshije dhe do të ekzekutoje gjithmonënumri[fjala] = numri[fjala] + 1?
Nga vjen ky mësim
Ndërtuar mbi
- Data Structures and Algorithms
- Për të lexuar më tej: Brian Heinold, A Practical Introduction to Python Programming
Kurset e alphaPlan ndërtohen mbi programe të zhvilluara në klasë, e nuk shpiken për web-in. Kur një pohim mbështetet mbi një standard të jashtëm ose mbi një rast të raportuar, ai emërtohet më sipër që ta kontrollosh vetë e të mos na besosh në fjalë.
Ky kurs u zhvillua nga alphaPlan Center mbi bazën e programeve të realizuara në partneritet me rrjetin American Corners.
Gjete diçka të paqartë, të vjetruar ose që mund të përmirësohet? Sugjero një përmirësim