Barcha kurslar Yo'nalishlar Reyting Kirish Ro'yxatdan o'tish

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

  1. O'zingiz haqingizda 4 kalitli lug'at tuzing va .items() bilan "kalit: qiymat" ko'rinishida chiqaring.
  2. Lug'atga yangi kalit qo'shing, bittasini yangilang, bittasini o'chiring — har qadamda len() bilan hajmini kuzating.
  3. .get()ning uch holatini ko'rsating: mavjud kalit, mavjud emas kalit, mavjud emas kalit + standart qiymat.
  4. O'zbekcha-inglizcha 5 so'zlik lug'at tuzing; foydalanuvchi so'ragan so'zni in bilan tekshirib, bor bo'lsa tarjimasini, bo'lmasa "topilmadi" chiqaring.
  5. Uch do'stingiz haqida lug'atlar ro'yxatini tuzing (ism, yosh) va faqat 20 yoshdan kattalarini chiqaring.
  6. Bitta talaba lug'atiga baholar ro'yxatini qo'shing va oxirgi bahosiga zanjir murojaat bilan yeting.

Bo'lim testi shu amallarni tekshiradi.

Lug'at (dictionary) — konspekt

Lug'at (dictionary) Maqola

Kalit-qiymat juftliklari: lug'at yaratish, metodlar va ichma-ich tuzilmalar — bir sahifada.

Eslatma yozish uchun saytga kiring.

Resurslar hozircha qo'shilmagan

O'qituvchi dars uchun qo'shimcha materiallarni qo'shganida shu yerda paydo bo'ladi.

Savol berish uchun saytga kiring.

Hozircha savollar yo'q

Bu dars yuzasidan birinchi savolni siz bering.