Table of Contents
Adatszerkezetek II. – dict, set
Dictionary: kulcs–érték párok gyűjteménye, mint egy valódi szótár. Hasonlít a C nyelv struktúrájára.
- Kapcsos zárójel: {}
- Kulcs és érték kettősponttal elválasztva
- Kulcsok egyediek
- print(szemely[“nev”])
szemely = {
"nev": "Anna",
"kor": 25,
"varos": "Budapest"
}
Példa: Hozz létre egy dictionary-t saját adataiddal (név, kor, kedvenc szám). Írd ki külön a nevet. Írd ki az egész dictionary-t.
adat = {
"nev": "Anna",
"kor": 20,
"kedvenc_szam": 7
}
print("Név:", adat["nev"])
print("Teljes adat:", adat)
Módosítás és bővítés
- Új kulcs hozzáadása
- Érték módosítása
szemely["kor"] = 26 szemely["foglalkozas"] = "mérnök"
Példa: Hozz létre egy üres dictionary-t. Kérd be a felhasználó nevét és életkorát. Tárold el dictionary-ben. Írd ki az eredményt.
adat = {}
nev = input("Név: ")
kor = int(input("Kor: "))
adat["nev"] = nev
adat["kor"] = kor
print(adat)
Dictionary bejárása
szemely = {"nev": "Anna", "kor": 25}
for kulcs in szemely:
print(kulcs, szemely[kulcs])
#Kulcs–érték együtt:
for kulcs, ertek in szemely.items():
print(kulcs, ertek)
Példa: Hozz létre egy dictionary-t 3 tantárggyal és jeggyel. Írd ki az átlagot.
jegyek = {
"matek": 4,
"fizika": 5,
"angol": 3
}
osszeg = 0
for ertek in jegyek.values():
osszeg += ertek
atlag = osszeg / len(jegyek)
print("Átlag:", atlag)
Dict fő metódusai
| Metódus | Funkció | Példa |
|---|---|---|
| dict.keys() | Visszaadja a kulcsok listáját (view object) | d.keys() |
| dict.values() | Visszaadja az értékek listáját | d.values() |
| dict.items() | Visszaadja a kulcs-érték párokat | d.items() |
| dict.get(key[, default]) | Visszaadja a kulcshoz tartozó értéket, ha nincs → default | d.get(“x”, 0) |
| dict.pop(key[, default]) | Törli a kulcsot és visszaadja az értékét | d.pop(“x”) |
| dict.popitem() | Törli és visszaad egy tetszőleges kulcs-érték párt | d.popitem() |
| dict.update([other]) | Másik szótár vagy iterable alapján frissít | d.update({“y”:10}) |
| dict.clear() | Törli az összes elemet | d.clear() |
| dict.setdefault(key[, default]) | Ha nincs kulcs, létrehozza alapértelmezett értékkel | d.setdefault(“x”,0) |
| dict.copy() | Felületes másolat készít | d2 = d.copy() |
Set alapjai
Set: egyedi elemek gyűjteménye, halmaza.
- Nincs indexelés
- Nem tartalmaz duplikációt
szamok = {1, 2, 3, 3, 2}
print(szamok)
Példa: Kérj be 5 számot. Tárold el listában. Alakítsd át set-té. Írd ki az egyedi elemeket
szamok = []
for i in range(5):
szam = int(input("Adj meg egy számot: "))
szamok.append(szam)
egyedi = set(szamok)
print("Egyedi elemek:", egyedi)
Set fő metódusai
| set.add(x) | Hozzáad egy elemet | s.add(5) |
|---|---|---|
| set.update(iterable) | Több elemet ad hozzá | s.update([1,2,3]) |
| set.remove(x) | Eltávolítja az elemet (ha nincs → KeyError) | s.remove(2) |
| set.discard(x) | Eltávolítja az elemet, ha van (hiba nélkül) | s.discard(2) |
| set.pop() | Eltávolít egy tetszőleges elemet | s.pop() |
| set.clear() | Összes elem törlése | s.clear() |
| set.copy() | Felületes másolat | s2 = s.copy() |
| set.union(other) | Egyesítés | s.union({4,5}) |
| set.intersection(other) | Metszet | s.intersection({2,3}) |
| set.difference(other) | Különbség | s.difference({1,2}) |
| set.symmetric_difference(other) | Szimmetrikus különbség | s.symmetric_difference({1,2}) |
| set.issubset(other) | Részhalmaz-e | s.issubset({1,2,3}) |
| set.issuperset(other) | Felülhalmaz-e | s.issuperset({1}) |
Összefoglaló feladatok
1. feladat Írj programot, ami:
- Bekér 5 nevet
- Minden névhez bekér egy pontszámot
- Dictionary-ben tárolja
- Kiírja a legmagasabb pontszámot elért nevet
eredmenyek = {}
for i in range(5):
nev = input("Név: ")
pont = int(input("Pontszám: "))
eredmenyek[nev] = pont
max_nev = None
max_pont = -1
for nev, pont in eredmenyek.items():
if pont > max_pont:
max_pont = pont
max_nev = nev
print("Legjobb eredmény:", max_nev, max_pont)
2. feladat: Van egy dict, ahol a kulcs a diák neve, az érték egy set az általa elvégzett tantárgyak jegyeivel.
- Adj hozzá egy új tantárgyat minden diáknak
- Ellenőrizd, hogy van-e 5-ös jegye minden diáknak
- Számold meg, hány diák kapott 1-es jegyet
diakok = {
"Anna": {5, 4, 3},
"Bence": {2, 3, 5},
"Csaba": {1, 2, 3}
}
# Új tantárgy 4-es jeggyel minden diáknak
for nev, jegyek in diakok.items():
jegyek.add(4)
# Ellenőrzés: van-e 5-ös jegy
for nev, jegyek in diakok.items():
if 5 in jegyek:
print(f"{nev} kapott 5-öst")
# 1-es jegyek száma
egyessel = sum(1 in jegyek for jegyek in diakok.values())
print("1-es jegyet kapott diákok száma:", egyessel)
3. feladat: Van egy bolt dict-ben a termékek és mennyiségek formájában.
- Egy új szállítmány érkezik egy másik dict-ből → frissítsd a raktárt
- Távolítsd el azokat a termékeket, amelyek elfogytak (0)
- Írd ki a teljes készletet
raktar = {"alma": 10, "korte": 5, "banan": 0}
szallitas = {"alma": 5, "banan": 7, "narancs": 3}
# Raktár frissítése
for termek, db in szallitas.items():
raktar[termek] = raktar.get(termek, 0) + db
# Elfogyott termékek törlése
torlendo = [k for k,v in raktar.items() if v == 0]
for k in torlendo:
raktar.pop(k)
print("Aktuális készlet:", raktar)
4. feladat: Adott két set a bolt A és B kínálatával.
- Írd ki, mely termékek vannak mindkét boltban (metszet)
- Melyek vannak csak az egyik boltban (szimmetrikus különbség)
- Egyesítsd a készleteket
boltA = {"alma", "banan", "narancs"}
boltB = {"korte", "banan", "narancs", "szilva"}
print("Mindkettőben:", boltA.intersection(boltB))
print("Csak az egyikben:", boltA.symmetric_difference(boltB))
boltA.update(boltB)
print("Összes termék:", boltA)
5. feladat:Egy dict dolgozó neve → set projektek.
- Adj hozzá új projektet minden dolgozónak
- Töröld azokat a projekteket, amelyeken senki sem dolgozik
- Írd ki a dolgozónkénti projektlistát
dolgozok = {
"Eva": {"A", "B"},
"Gabor": {"B", "C"},
"Ilona": {"C"}
}
# Új projekt D mindenkihez
for projektek in dolgozok.values():
projektek.add("D")
# Ellenőrizzük, mely projektek senkinél sem szerepelnek
osszes = set().union(*dolgozok.values())
nem_aktiv = {"E", "F"} - osszes
print("Nem aktív projektek:", nem_aktiv)
print("Dolgozók projektjei:")
for nev, projektek in dolgozok.items():
print(nev, ":", projektek)
6. feladat: Adott egy szöveg string.
- Készíts dict-et, ahol a kulcs a szó, az érték a darabszám
- Távolítsd el a ritkán előforduló szavakat (pl. egyszer előforduló)
- Írd ki a leggyakoribb szót
szoveg = "python lista ciklus python python adatszerkezet lista ciklus"
szavak = szoveg.split()
szavak_szam = {}
for szo in szavak:
szavak_szam[szo] = szavak_szam.get(szo, 0) + 1
# Ritka szavak törlése
for szo in list(szavak_szam.keys()):
if szavak_szam[szo] == 1:
szavak_szam.pop(szo)
# Leggyakoribb szó
leggyakoribb = max(szavak_szam, key=szavak_szam.get)
print("Leggyakoribb szó:", leggyakoribb)
print("Szó előfordulások:", szavak_szam)
