Kalo te përmbajtja

8 min lexim

American Corners

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

  1. 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.
  2. Cili është ndryshimi në sjellje mes cmimet["qumesht"] dhe cmimet.get("qumesht", 0) kur çelësi "qumesht" nuk është në fjalor?
  3. 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