Lug'atlar(dictionaries)
Asosiy tushunchalar
Python ma'lumotlar tuzilmalarini yana bir bu Lug'at
turi. Lug'at ma'lumotlarni kalit(key), qiymay(value) ko'rinishida saqlaydi.
Bu usul boshqa tuzilmalardan ba'zi ustunliklarni beradi misol uchun qiymatni tezroq olish imkoniyati.
Note
Lug'at turi tartiblangan, o'zgartirish imkonini beradi va takrorlanishlarga ruhsat bermaydi. Python 3.7 dan boshlab tartiblangan, 3.6 dan pastki versiyalardan tartiblanmagan.
Lug'atni e'lon qilishda ochish {
va yopish }
dan foydalanamiz bu set(to'plam)
tuzilmasiga o'xshash lekin bunday emas, chunki set
faqat qiymat qabul qiladi. Lug'atda esa kalit ham bo'lishi kerak.
1-misol. Lug'atni e'lon qilish
Natija:
Lug'atlarga bir nechta kalit qiymat ham berish mumkin.
2-misol.
Natija:
Lug'atlarning qiymatlariga kalit orqali murojaat qilinadi, chunki lug'atlar ma'lumotlarni kalitlar bilan saqlaydi.
3-misol. Lug'at qiyatini olish
Natija:
Pythonda lug'at turiz o'zgaruvchan uni e'lon qilib qiymat berganimizdan so'ng o'zgartirish kiritishimiz mumkin. Biror element qo'shishimiz yoki o'chirishimiz mumkin. Takrorlanadigan elementlarga ruhsat bermaydi agar biror element takrorlansa ush element ustiga oxirgi o'rinda joylashganini olinadi.
4-misol.
lugat = {
'ism': 'Farrux',
'yosh': 20,
'yosh': 21,
'manzil': "Toshkent shahri, 100007",
}
print(lugat)
Natija:
Yuqroda lug'atni o'zgaruvchan degan edik, kelin endi biror qiymatini o'zgartirib ko'ramiz.
4.1-misol.
lugat = {
'ism': 'Farrux',
'yosh': 20,
'manzil': "Toshkent shahri, 100007",
}
print(lugat)
lugat['yosh'] = 30
print(lugat)
Natija:
{'ism': 'Farrux', 'yosh': 20, 'manzil': 'Toshkent shahri, 100007'}
{'ism': 'Farrux', 'yosh': 30, 'manzil': 'Toshkent shahri, 100007'}
Boshqa turlarni ko'rganizda ularni uzunligi aniqlash uchun len()
funksiyasidan foydalangan edik, bu funksiyani lug'atlar bilan ham foydalanishimiz mumkin.
5-misol. Lug'at uzunligini aniqlash
Natija:
Lug'atlarda uzunlik kalitlar(keys)
soni bilan o'lchanadi.
Lug'at turini aniqlash uchun type()
funksiyasidan foydalanishim mumkin.
6-misol. Lug'at turini tekshirish
Natija:
B yerda class tushunchasini kelajakda ko'rib chiqamiz.
Lug'atlar qiymati faqat matn yoki son ko'rinishda emas boshqa turlardan ham foydalanish mumkin misol uchun list, tuple, set kabi to'plamlarni qiymat sifatida foydalanishim mumkin.
7-misol. Boshqa turdagi qiymatlar.
lugat = {
'ism': 'Farrux',
'yosh': 20,
'manzillar': ['Toshkent shahri, 10007', 'Navoiy viloyati, 112000'],
}
print(lugat)
Natija:
O'zingiz mustaqil ravishda boshqa turlarni ham sinab ko'ring!
Lug'atlar elementlari bilan ishlash.
Lug'at elemntlarini qanday olish qiymat berishlari yuqorida ko'rib chiqdik, endi shu mavzuga ozroq churroq kiramiz.
Biz har doim ham lug'atdan element olishimizda to'g'ri kiritmaymiz yoki mavjud bo'lmagan kalit kiritamiz bu holatda dasturizmi nima ish qiladi?
8-misol.
lugat = {
'ism': 'Farrux',
'yosh': 20,
'manzillar': ['Toshkent shahri, 10007', 'Navoiy viloyati, 112000'],
}
print(lugat['manzil'])
Natija:
Bizda shunday xatolik xabarini olamiz. Bu holat dastur ishlashi salbiy ta'sir ko'rsatadi chunki dasturimiz shu joyda ishini to'xtatadi bu holat mijoz uchun juda noqul bo'lishi mumkin. Buning o'rniga mijozga xatolik ni aniq sababini ko'rsatish to'g'ri bo'ladi. Xo'sh buni qanday amalga oshirish mumkin?
Bunda bizga lug'at turining get()
funksiyasi yordam beradi.
9-misol.
lugat = {
'ism': 'Farrux',
'yosh': 20,
'manzillar': ['Toshkent shahri, 10007', 'Navoiy viloyati, 112000'],
}
print(lugat.get('manzil'))
Natija:
None tur bo'lib qachonki biror o'zgaruvchida qiymat mavjud bo'lmasa qaytariladi. Bizni misolda manzil
deb nomlangan kelit bo'lmaganligi uchun shunday natija chop qilindi.
Agar sizga None
natijasi to'g'ri kelmasa o'zingizni default
qiymatingizni ko'rsatib ketishingiz mumkin, shunda kalit topilmasa siz ko'rsatgan qiymat qaytariladi.
10-misol.
lugat = {
'ism': 'Farrux',
'yosh': 20,
'manzillar': ['Toshkent shahri, 10007', 'Navoiy viloyati, 112000'],
}
print(lugat.get('manzil', 'Mavjud emas'))
Natija:
Yuqrida get()
ga berilgan birinchi qiymat ya'ni manzil
bu kalit, ikkinchisi esa default
qiymat.
Lug'at kalitlarini chop qilish.
Lug'atdagi barcha mavjud kalitlar nomlarini chop qilish imkoniyati ham mavjud.
11-misol.
lugat = {
'ism': 'Farrux',
'yosh': 20,
'manzillar': ['Toshkent shahri, 10007', 'Navoiy viloyati, 112000'],
}
print(lugat.keys())
Natija:
Qiymatlarini ham alohida olishimiz mumkin.
12-misol.
lugat = {
'ism': 'Farrux',
'yosh': 20,
'manzillar': ['Toshkent shahri, 10007', 'Navoiy viloyati, 112000'],
}
print(lugat.values())
Natija:
Lug'at elementlarini kalit va qiymatlarini chop qilish.
items()
funksiaysi lug'atlar bilan ishlashda bizga elementlarini tuple ko'rinishida olishga yordam beradi. Bunda bizga natija list ichida tuple ko'rinishida qaytariladi.
13-misol.
lugat = {
'ism': 'Farrux',
'yosh': 20,
'manzillar': ['Toshkent shahri, 10007', 'Navoiy viloyati, 112000'],
}
print(lugat.items())
Natija:
dict_items([('ism', 'Farrux'), ('yosh', 20), ('manzillar', ['Toshkent shahri, 10007', 'Navoiy viloyati, 112000'])])
Tuple ni 0
indexi kalit, 1
indexi qiymat o'rnida kelyapdi.
Lug'atda kalitni tekshirish.
14-misol.
lugat = {
'ism': 'Farrux',
'yosh': 20,
'manzillar': ['Toshkent shahri, 10007', 'Navoiy viloyati, 112000'],
}
if 'manzil' in lugat:
print("Kalit bor")
else:
print("Yo'q")
Natija:
Siz bor kalit bilan tekshirib ko'ring.
Lug'at elementlarini o'zgartirish
15-misol.
Natija:
Lug'at elementlarini o'zgartirish uchun update()
funksiyasi ham mavjud.
16-misol.
lugat = {
'ism': 'Sardor',
'yosh': 20,
'manzil': "Toshkent sh",
}
lugat.update({'yosh': 25})
print(lugat)
Natija:
Agarda sizdan lug'at uchun yangi element qo'shish yoki mavjud elementlarni o'zgartirish talab qilinsa yuqoridagi usullardan foydalanishingiz mumkin bo'ladi.
Lug'atdan elementni o'chirish
Elementni o'chirish uchunga pop()
funksiyasi yordam beradi. pop()
ga lug'atning maxsus kalitini qiymat sifatida qabul qiladi.
17-misol.
Natija:
Elementlarni o'chirish uchun bizda yana popitem()
deb nomlangan funksiya bor bu oxirgi qo'shigan elementni o'chiradi. Python 3.7 dan oldingi versiyalarida
tasodifiy elementlarni o'chirgan. Element o'chirish uchun del
operatori ham bor, bu ham lug'atda mavjud kalit(key) nomi bilan o'chiradi.
Agarda siz lug'atni butunlay o'chirmoqchi bo'lsangiz del
operatoridan foydalanishingiz mumkin, lekin sizga faqat elementlarini tozalash kerak bo'lsa clear()
funkisyasi yordam beradi.
18-misol.
Natija:
19-misol.
lugat = {
'ism': 'Sardor',
'yosh': 20,
'manzil': "Toshkent sh",
}
del lugat # lug'at to'liq xotiradan o'chirildi.
print(lugat)
Natija:
20-misol.
Natija:
Lug'at va sikl operatorlari.
Odatda lug'atlarda juda ko'p ma'lumotlar saqlanadi, bu ma'lumotlar bilan ishlashda sikl operatorlaridan foydalanmaslik ozroq qiyin bo'lishi mumkin. Lug'atlar bilan ishlashda sikl operatorlari haqiada endi ko'rib chiqamiz.
21-misol.
Natija:
Yuqoridagi misolda for sikl operatori lug'atning barcha kalit(key)larini chop qildi, quyida shu kalitlardan foydalanib qiymatlarni chop qilishni ko'ramiz.
22-misol.
Natija:
Biz yuqorida lug'atlar bilan ishlash uchun mo'ljallangan values()
va items()
funksiyalarini ko'rgan edik, endi shu funksiyalarni sikl bilan qanday ishlatishni ko'rib chiqamiz.
values()
bizga lug'ating qiymatlarini qaytaradi.
23-misol.
Natija:
Quyida kalit(key)larni alohida olish.
24-misol.
Natija:
Bu imkoniyatlardan siz haqiqiy loyihalarda holatingizga qarab foydalanasiz, shu sababli aniq shu joyda ishlatishingiz kerak yoki mumkin deyish qiyin.
Endi esa har ikkalasini ya'ni kalit(key) va qiymat(value)larni bir vaqtda olishni ko'rib chiqamiz.
25-misol.
lugat = {
'ism': 'Sardor',
'yosh': 20,
'manzil': "Toshkent sh",
}
for k, v in lugat.items():
print(k, v)
Natija:
Ozroq formatlaymiz:
26-misol.
lugat = {
'ism': 'Sardor',
'yosh': 20,
'manzil': "Toshkent sh",
}
for k, v in lugat.items():
print('kalit =', k, 'Qiymat =', v)
Natija:
Umid qilamanki barchasi tushunarli bo'ldi. Yaxshi tushunish uchun qayta bajaring, qiymatlarni o'zgartiring va savol bering.
Lug'atni nusxalash
Lug'atlarni nusxalashda siz dic2 = dic1
kabi nusxalay olmaysiz, chunki dic2
o'zgaruvchi dic1
ni xotira manziliga bog'langan. Ya'ni ikkala o'zgaruvchi bitta xotira manzilidagi qaiymatni o'zida saqlayapdi.
Bunday holatlar uchun maxsus imkoniyatlar bor, buni copy()
bilan amalga oshirish mumkin.
27-misol.
lugat1 = {
'ism': 'Sardor',
'yosh': 20,
'manzil': "Toshkent sh",
}
lugat2 = lugat1.copy()
print(lugat1)
print(lugat2)
Natija:
{'ism': 'Sardor', 'yosh': 20, 'manzil': 'Toshkent sh'}
{'ism': 'Farrux', 'yosh': 20, 'manzil': 'Toshkent sh'}
Boshqa yo'li esa dict()
dan foydalanish
28-misol.
lugat1 = {
'ism': 'Sardor',
'yosh': 20,
'manzil': "Toshkent sh",
}
lugat2 = dict(lugat1)
print(lugat1)
print(lugat2)
Natija:
{'ism': 'Sardor', 'yosh': 20, 'manzil': 'Toshkent sh'}
{'ism': 'Farrux', 'yosh': 20, 'manzil': 'Toshkent sh'}
Ichma-ich lug'atlar
Buni tushinish uchun quyidagi holatni o'ylab ko'raylik.
Bizda sinf xonalari bor bu xonalarni nomlari, xona sig'imi, va jihozlari haqidagi ma'lumotlar bor shu ma'lumotlarni saqlaydigan dastur qilish kerak bo'ldi.
29-misol.
xonalar = {
"xona_1": {
"nomi": "Tarix",
"orinlar_soni": 20,
"jihozlar": "10 ta stol, 20 stul, Monitor"
},
"xona_2": {
"nomi": "Informatika",
"orinlar_soni": 20,
"jihozlar": "10 ta stol, 20 stul, 20 ta kompyuter va monitor"
},
"xona_3": {
"nomi": "Iqtisod",
"orinlar_soni": 15,
"jihozlar": "11 ta stol, 16 stul, Monitor, Globus"
}
}
print(xonalar)
Natija:
{'xona_1': {'nomi': 'Tarix', 'orinlar_soni': 20, 'jihozlar': '10 ta stol, 20 stul, Monitor'}, 'xona_2': {'nomi': 'Informatika', 'orinlar_soni': 20, 'jihozlar': '10 ta stol, 20 stul, 20 ta kompyuter va monitor'}, 'xona_3': {'nomi': 'Iqtisod', 'orinlar_soni': 15, 'jihozlar': '11 ta stol, 16 stul, Monitor, Globus'}}
Buni quyidagi ko'rinishda ham yozishimiz mumkin.
30-misol.
xona_1 = {
"nomi": "Tarix",
"orinlar_soni": 20,
"jihozlar": "10 ta stol, 20 stul, Monitor"
}
xona_2 = {
"nomi": "Informatika",
"orinlar_soni": 20,
"jihozlar": "10 ta stol, 20 stul, 20 ta kompyuter va monitor"
}
xona_3 = {
"nomi": "Iqtisod",
"orinlar_soni": 15,
"jihozlar": "11 ta stol, 16 stul, Monitor, Globus"
}
xonalar = {
"xona_1": xona_1,
"xona_2": xona_2,
"xona_3": xona_3
}
print(xonalar)
Natija:
{'xona_1': {'nomi': 'Tarix', 'orinlar_soni': 20, 'jihozlar': '10 ta stol, 20 stul, Monitor'}, 'xona_2': {'nomi': 'Informatika', 'orinlar_soni': 20, 'jihozlar': '10 ta stol, 20 stul, 20 ta kompyuter va monitor'}, 'xona_3': {'nomi': 'Iqtisod', 'orinlar_soni': 15, 'jihozlar': '11 ta stol, 16 stul, Monitor, Globus'}}
Natija bir xil lekin dastur kodlarida farq bor, bu bizlan biz dasturizdagi kodlarni qismlarga bo'lish orqali ozroq bo'lsada chiroyli va tushunarli ko'rinishga keltirdik.
Endi ichama-ich lug'atning elementlariga qanday murojaat qilsa bo'ladi degan savolga javob topamiz. Bu juda oddiy, biz kalit bilan murojaat qilamiz.
31-misol.
xona_1 = {
"nomi": "Tarix",
"orinlar_soni": 20,
"jihozlar": "10 ta stol, 20 stul, Monitor"
}
xona_2 = {
"nomi": "Informatika",
"orinlar_soni": 20,
"jihozlar": "10 ta stol, 20 stul, 20 ta kompyuter va monitor"
}
xona_3 = {
"nomi": "Iqtisod",
"orinlar_soni": 15,
"jihozlar": "11 ta stol, 16 stul, Monitor, Globus"
}
xonalar = {
"xona_1": xona_1,
"xona_2": xona_2,
"xona_3": xona_3
}
print(xonalar['xona_1'])
Natija:
Bu yerda xona_1
kalitida saqlangan lug'atni chop qildik, endi shu lug'atni elementiga murojaat qilamiz.
32-misol.
xona_1 = {
"nomi": "Tarix",
"orinlar_soni": 20,
"jihozlar": "10 ta stol, 20 stul, Monitor"
}
xona_2 = {
"nomi": "Informatika",
"orinlar_soni": 20,
"jihozlar": "10 ta stol, 20 stul, 20 ta kompyuter va monitor"
}
xona_3 = {
"nomi": "Iqtisod",
"orinlar_soni": 15,
"jihozlar": "11 ta stol, 16 stul, Monitor, Globus"
}
xonalar = {
"xona_1": xona_1,
"xona_2": xona_2,
"xona_3": xona_3
}
print(xonalar['xona_1']['nomi'])
Natija:
Ichma-ich lug'atlar va sikl operatori
33-misol.
xona_1 = {
"nomi": "Tarix",
"orinlar_soni": 20,
"jihozlar": "10 ta stol, 20 stul, Monitor"
}
xona_2 = {
"nomi": "Informatika",
"orinlar_soni": 20,
"jihozlar": "10 ta stol, 20 stul, 20 ta kompyuter va monitor"
}
xona_3 = {
"nomi": "Iqtisod",
"orinlar_soni": 15,
"jihozlar": "11 ta stol, 16 stul, Monitor, Globus"
}
xonalar = {
"xona_1": xona_1,
"xona_2": xona_2,
"xona_3": xona_3
}
for kalit, lugat in xonalar.items():
print(kalit)
for n in lugat:
print(n, lugat[n])
print('---')
Natija:
xona_1
nomi Tarix
orinlar_soni 20
jihozlar 10 ta stol, 20 stul, Monitor
---
xona_2
nomi Informatika
orinlar_soni 20
jihozlar 10 ta stol, 20 stul, 20 ta kompyuter va monitor
---
xona_3
nomi Iqtisod
orinlar_soni 15
jihozlar 11 ta stol, 16 stul, Monitor, Globus
---
Lug'at bilan ishlash uchun maxsus funksiyalar jadvali
Metod | Tavsif |
---|---|
clear() |
Lug'atdagi barcha elementlarni olib tashlaydi |
copy() |
Lug'atning nusxasini qaytaradi |
fromkeys() |
Belgilangan kalit va qiymat bilan lug'atni qaytaradi |
get() |
Belgilangan kalitning qiymatini qaytaradi |
items() |
Har bir kalit-qiymat juftligi uchun keltirilgan tuple ro'yxatini qaytaradi |
keys() |
Lug'atdagi barcha kalitlar ro'yxatini qaytaradi |
pop() |
Belgilangan kalitga ega elementni olib tashlaydi |
popitem() |
So'nggi kiritilgan kalit-qiymat juftligini olib tashlaydi |
setdefault() |
Belgilangan kalitning qiymatini qaytaradi. Agar kalit mavjud bo'lmasa, kalit va qiymatni qo'shadi |
update() |
Belgilangan kalit-qiymat juftliklari bilan lug'atni yangilaydi |
values() |
Lug'atdagi barcha qiymatlar ro'yxatini qaytaradi |
Lug'at bilan ishlash uchun maxsus funksiyalarga misollar
clear()
copy()
fromkeys()
get()
items()
keys()
pop()
popitem()
setdefault()
my_dict = {"name": "Ali", "age": 25, "city": "Tashkent"}
my_dict.setdefault("age", 30)
print(my_dict)
update()
my_dict = {"name": "Ali", "age": 25, "city": "Tashkent"}
my_dict.update({"city": "Samarkand", "country": "Uzbekistan"})
print(my_dict)