Bu bo'limda ma'lumotni nom orqali saqlaydigan tuzilma — lug'at (dictionary) o'rganildi: yaratish, o'zgartirish, xavfsiz murojaat, aylanib chiqish va ichma-ich tuzilmalar.
Lug'at nima va nega kerak
Ro'yxat elementlarni tartib raqami bilan saqlaydi, lug'at esa — kalit bilan. Talaba haqidagi ma'lumotni ikkala usulda solishtiring:
# Ro'yxat: 0 nima edi? 1-chi nima edi? Eslab yurish kerak.
talaba_list = ["Ali", 21, "Toshkent"]
# Lug'at: har qiymatning o'z nomi bor.
talaba = {"ism": "Ali", "yosh": 21, "shahar": "Toshkent"}
print(talaba["ism"], "-", talaba["shahar"])
Natija:
Ali - Toshkent
Lug'at {kalit: qiymat} juftliklaridan tuziladi. Kalitlar odatda matn, qiymatlar — istalgan tur (son, matn, ro'yxat, hatto boshqa lug'at).
| list | dict | |
|---|---|---|
| Murojaat | Indeks: [0] |
Kalit: ["ism"] |
| Mos vazifa | Bir turdagi qator ma'lumot | Bir obyektning nomlangan xususiyatlari |
| Takrorlanish | Qiymatlar takror bo'laveradi | Kalitlar noyob |
| Misol | Xaridlar ro'yxati | Bitta mahsulot pasporti |
Asosiy amallar: qo'shish, yangilash, o'chirish
talaba = {"ism": "Ali", "yosh": 21}
talaba["shahar"] = "Toshkent" # yangi kalit — qo'shiladi
talaba["yosh"] = 22 # mavjud kalit — yangilanadi
del talaba["shahar"] # o'chirish
print(talaba)
print(len(talaba)) # nechta juftlik borligi
Natija:
{'ism': 'Ali', 'yosh': 22}
2
E'tibor bering: qo'shish ham, yangilash ham bitta sintaksis — lugat[kalit] = qiymat. Kalit bo'lmasa yaratiladi, bo'lsa ustiga yoziladi. Shu sababdan kalitlar takrorlanmaydi: bitta kalitga ikki marta qiymat berilsa, faqat oxirgisi qoladi.
Xavfsiz murojaat: [] va .get()
Mavjud bo'lmagan kalit bilan ikki xil ishlash mumkin:
print(talaba["email"])
Natija:
KeyError: 'email'
print(talaba.get("email"))
print(talaba.get("email", "kiritilmagan")) # standart qiymat bilan
Natija:
None
kiritilmagan
Qoida: kalit borligiga ishonchingiz komil bo'lsa [] ishlating (xato chiqsa — bu haqiqiy muammoning belgisi); ishonch bo'lmasa — .get() yoki oldindan tekshiruv: if "email" in talaba:.
Tipik xato — foydalanuvchidan kelgan ma'lumotga [] bilan murojaat qilish: birinchi kutilmagan kalitda dastur KeyError bilan to'xtaydi.
Aylanib chiqish
talaba = {"ism": "Ali", "yosh": 22, "shahar": "Toshkent"}
for kalit in talaba.keys():
print(kalit)
for qiymat in talaba.values():
print(qiymat)
for kalit, qiymat in talaba.items():
print(f"{kalit}: {qiymat}")
Natija:
ism
yosh
shahar
Ali
22
Toshkent
ism: Ali
yosh: 22
shahar: Toshkent
Amalda eng ko'p .items() ishlatiladi — kalit ham, qiymat ham birga kerak bo'ladi.
Ichma-ich tuzilmalar (nesting)
Real ma'lumot deyarli har doim aralash: lug'at ichida ro'yxat, ro'yxat ichida lug'at. Ikkala yo'nalishga bitta-bitta misol:
Lug'at ichida ro'yxat — bitta obyektning ko'p qiymatli xususiyati:
talaba = {"ism": "Ali", "fanlar": ["matematika", "fizika", "python"]}
print(talaba["fanlar"][2]) # zanjir: avval kalit, keyin indeks
Natija:
python
Lug'atlar ro'yxati — bir xil tuzilmali obyektlar to'plami; amaliyotda eng ko'p uchraydigan shakl (ma'lumotlar bazasidan kelgan yozuvlar aynan shunday ko'rinadi):
talabalar = [
{"ism": "Ali", "ball": 85},
{"ism": "Vali", "ball": 92},
{"ism": "Olim", "ball": 74},
]
for t in talabalar:
if t["ball"] >= 80:
print(f"{t['ism']} — {t['ball']} ball")
Natija:
Ali — 85 ball
Vali — 92 ball
Murojaat zanjirini ichkaridan emas, chapdan o'ngga o'qing: talabalar[1]["ism"] — "ro'yxatning 1-elementi (Vali lug'ati), undan ism kaliti".
Eslab qoling
- Lug'at —
{kalit: qiymat}; murojaat kalit orqali, kalitlar noyob. lugat[kalit] = qiymat— qo'shadi yoki yangilaydi;del— o'chiradi.- Ishonchsiz kalitga
.get()(xohlasangiz standart qiymat bilan);in— borligini tekshiradi. .items()— kalit-qiymat juft holda aylanish.- Nesting zanjiri chapdan o'ngga o'qiladi:
royxat[i][kalit].
Amaliyot
- O'zingiz haqingizda 4 kalitli lug'at tuzing va
.items()bilan "kalit: qiymat" ko'rinishida chiqaring. - Lug'atga yangi kalit qo'shing, bittasini yangilang, bittasini o'chiring — har qadamda
len()bilan hajmini kuzating. .get()ning uch holatini ko'rsating: mavjud kalit, mavjud emas kalit, mavjud emas kalit + standart qiymat.- O'zbekcha-inglizcha 5 so'zlik lug'at tuzing; foydalanuvchi so'ragan so'zni
inbilan tekshirib, bor bo'lsa tarjimasini, bo'lmasa "topilmadi" chiqaring. - Uch do'stingiz haqida lug'atlar ro'yxatini tuzing (
ism,yosh) va faqat 20 yoshdan kattalarini chiqaring. - Bitta talaba lug'atiga
baholarro'yxatini qo'shing va oxirgi bahosiga zanjir murojaat bilan yeting.
Bo'lim testi shu amallarni tekshiradi.