Python: Szótár (dictionary)

10. osztály 10.évf Python Python

A szótár alapvetően adatpárokat tárol: egy kulcsot és a kozzá tartozó értéket. A kulcsok egyediek, nem lehet benne két azonos kulcs! Az értékek bármilyen adattípusúak lehetnek: szöveg, szám, másik szótár…
A szótárból az értékeket a kulcsok segítségével tudjuk elérni.
Nézzünk egy nagyon egyszerű példát, tároljuk el a segélyhívó számokat szótár segítségével!
A szótár elemei törölhetők, megváltoztathatók.
A szótár elemeit kapcsos zárójelek közé kell tenni, a kulcs és az érék közé kettőspont kerül, az elemek közé vessző.

A Python szótár adattípusához számos beépített függvény és módszer tartozik, amelyek lehetővé teszik az adatok hatékony kezelését. Néhány fontosabb függvény és módszer:

len() – visszatér a szótárban tárolt kulcs-érték párok számával
keys() – visszaadja a szótárban tárolt összes kulcsot egy listában
values() – visszaadja a szótárban tárolt összes értéket egy listában
items() – visszaadja a szótárban tárolt összes kulcs-érték párt egy lista formájában
get(key, default=None) – visszatér a megadott kulcshoz tartozó értékkel, ha a kulcs létezik a szótárban. Ha a kulcs nem létezik, akkor az alapértelmezett értéket adja vissza
pop(key, default=None) – eltávolítja a megadott kulcshoz tartozó kulcs-érték párt a szótárból, és visszatér a kulcshoz tartozó értékkel. Ha a kulcs nem létezik, akkor az alapértelmezett értéket adja vissza
del() – eltávolítja a megadott kulcshoz tartozó kulcs-érték párt a szótárból, de akár az egész szótár is törölhető vele
update(dict) – hozzáadja a megadott szótár kulcs-érték párait a szótárhoz, felülírva azokat, amelyek megegyeznek a meglévő kulcsokkal
in, vagy contains key – segítségével ellenőrizhető, hogy a megadott kulcs benne van-e a szótárban
clear() – eltávolítja az összes kulcs-érték párt a szótárból
copy() – visszatér egy másolattal a szótárról

# szótár létrehozása
telefonszamok={"mentők":104,"rendőrség":107,"tűzoltóság":105}

# rendőrség telefonszáma: 
print (telefonszamok["rendőrség"])

# ha nincs benne az adott szó a szótárban
print(telefonszamok.get("iskola","Nincs ilyen adat!"))

#szótár tartalma
print(telefonszamok)

#új adat hozzáadása: sima értékadás, módosítás ugyanígy
telefonszamok["Általános segélyhívó"] = 111
telefonszamok["Általános segélyhívó"] = 112
telefonszamok["Medicopter117"] = 117

print(telefonszamok)

# törlés
del(telefonszamok['Medicopter117'])

# Érték másolása
telefonszamok["police"]=telefonszamok["rendőrség"]

# szótár hossza
print(len(telefonszamok))

# kulcsok kiiratása
print(telefonszamok.keys())

# étrékek kiiratása
print(telefonszamok.values())

# Szótár tartalmának kiiratása összetett listaként
print(telefonszamok.items())

# szótár bejárása, kulcsok kiiratása
for kulcs in telefonszamok:
    print(kulcs)

# keys metódus - a kulcsokhoz tartozó értékek kiírása
for kulcs in telefonszamok.keys():
    print(kulcs,"telefonszáma: ",telefonszamok[kulcs])

# items metódus - listaelemekre hasonlít, kulcs és érték
for kulcs, ertek in telefonszamok.items():
    print(kulcs, "telefonszáma: ",ertek)
# Elemek kiiratása 1 első elemtől a szótár utolsó eleméig
for key, ertek in list(telefonszamok.items())[1:]:
    print(key + ": " + str(ertek))

for key, value in list(telefonszamok.items())[1:3]:
    print(key + ": " + str(value))

# values() metódus, ha kizárólag az értékeket akarjuk kiíratni
for ertek in telefonszamok.values():
    print(ertek)

# Adott kulcs benne van-e a szótárban?
print("rendőrség" in telefonszamok.keys())
# print("rendőrség" in telefonszamok.keys())

# Adott érték benne van-e a szótárban?
print(112 in telefonszamok.values())

Feladat: Tárold szótárban a hónapok nevét, és azt, hogy hány napból állnak! A program kérje be egy hónap nevét, és írja ki hány napos a megadott hónap!

# a hónapok és a hozzájuk tartozó napok száma
honapok = {"január": 31, "február": 28, "március": 31, "április": 30, "május": 31, "június": 30, "július": 31, "augusztus": 31, "szeptember": 30, "október": 31, "november": 30, "december": 31}

# a felhasználótól kérjük be a hónap nevét
honap = input("Adja meg a kívánt hónap nevét: ")

# ellenőrizzük, hogy az adott hónap szerepel-e a szótárban
if honap in honapok:
    # ha igen, kiírjuk a hónap nevét és a hozzá tartozó napok számát
    print(f"{honap.capitalize()} hónapban {honapok[honap]} nap van.")
else:
    # ha nem, kiírjuk, hogy nincs ilyen hónap
    print("Nincs ilyen hónap.")

Feladat: Készíts egyszerű telefonkönyvet!
A program funkciói: szótár tartalmának megjelenítése, új elem felvétele, telefonszám módosítása, elem törlése, adatok mentése txt-be.

# Szótár inicializálása a txt fájl tartalmával
telefonkonyv = {}
with open("adatok.txt", "r") as file:
    for sor in file:
        nev, szam = sor.strip().split(",")
        telefonkonyv[nev] = szam

# While ciklus indítása a menüvel
while True:
    print("1. Szótár tartalma")
    print("2. Új elem felvétele")
    print("3. Elem törlése")
    print("4. Elem módosítása")
    print("5. Kilépés")
    opcio = input("Válassz egy menüpontot (1-5): ")

    # Szótár tartalmának megjelenítése
    if opcio == "1":
        for nev, szam in telefonkonyv.items():
            print(nev, szam)

    # Új elem felvétele
    elif opcio == "2":
        nev = input("Add meg az új névét: ")
        szam = input("Add meg a hozzá tartozó telefonszámot: ")
        telefonkonyv[nev] = szam
        print("Az új elem felvéve.")

    # Elem törlése
    elif opcio == "3":
        nev = input("Add meg a törlendő névét: ")
        if nev in telefonkonyv:
            del telefonkonyv[nev]
            print("Az elem törölve.")
        else:
            print("Nem található ilyen név a szótárban.")

    # Elem módosítása
    elif opcio == "4":
        nev = input("Add meg a módosítandó névét: ")
        if nev in telefonkonyv:
            szam = input("Add meg az új telefonszámot: ")
            telefonkonyv[nev] = szam
            print("Az elem módosítva.")
        else:
            print("Nem található ilyen név a szótárban.")

    # Kilépés
    elif opcio == "5":
        print("Viszlát! Adatok mentése...2")
        with open("adatok.txt", "w") as file:
            for nev, szam in telefonkonyv.items():
                file.write(nev + "," + szam + "\n")
        break

    # Hibakezelés
    else:
        print("Érvénytelen választás. Válassz újra.")