Skip to content

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

lugat = {
    'kalit': 'qiymat'
}
print(lugat)

Natija:

{'kalit': 'qiymat'}

Lug'atlarga bir nechta kalit qiymat ham berish mumkin.

2-misol.

lugat = {
    'ism': 'Farrux',
    'yosh': 20,
    'manzil': "Toshkent shahri, 100007",
}
print(lugat)

Natija:

{'ism': 'Farrux', 'yosh': 20, 'manzil': 'Toshkent shahri, 100007'}

Lug'atlarning qiymatlariga kalit orqali murojaat qilinadi, chunki lug'atlar ma'lumotlarni kalitlar bilan saqlaydi.

3-misol. Lug'at qiyatini olish

lugat = {
    'ism': 'Farrux',
    'yosh': 20,
    'manzil': "Toshkent shahri, 100007",
}
print(lugat['ism'])

Natija:

Farrux

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:

{'ism': 'Farrux', 'yosh': 21, 'manzil': 'Toshkent shahri, 100007'}

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

lugat = {
    'ism': 'Farrux',
    'yosh': 20,
    'manzil': "Toshkent shahri, 100007",
}
print(len(lugat))

Natija:

3

Lug'atlarda uzunlik kalitlar(keys) soni bilan o'lchanadi.

Lug'at turini aniqlash uchun type() funksiyasidan foydalanishim mumkin.

6-misol. Lug'at turini tekshirish

lugat = {
    'ism': 'Farrux',
    'yosh': 20,
    'manzil': "Toshkent shahri, 100007",
}
print(type(lugat))

Natija:

<class 'dict'>

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:

{'ism': 'Farrux', 'yosh': 20, 'manzillar': ['Toshkent shahri, 10007', 'Navoiy viloyati, 112000']}

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:

KeyError: 'manzil'

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

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:

Mavjud emas

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:

dict_keys(['ism', 'yosh', 'manzillar'])

Qiymatlarini ham alohida olishimiz mumkin.

12-misol.

lugat = {
    'ism': 'Farrux',
    'yosh': 20,
    'manzillar': ['Toshkent shahri, 10007', 'Navoiy viloyati, 112000'],
}
print(lugat.values())

Natija:

dict_values(['Farrux', 20, ['Toshkent shahri, 10007', 'Navoiy viloyati, 112000']])

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:

Yo'q

Siz bor kalit bilan tekshirib ko'ring.

Lug'at elementlarini o'zgartirish

15-misol.

lugat = {
    'ism': 'Sardor',
    'yosh': 20,
    'manzil': "Toshkent sh",
}
lugat['yosh'] = 25
print(lugat)

Natija:

{'ism': 'Sardor', 'yosh': 25, 'manzil': 'Toshkent sh'}

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:

{'ism': 'Sardor', 'yosh': 25, 'manzil': 'Toshkent sh'}

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.

lugat = {
    'ism': 'Sardor',
    'yosh': 20,
    'manzil': "Toshkent sh",
}
lugat.pop('ism')
print(lugat)

Natija:

{'yosh': 25, 'manzil': 'Toshkent sh'}

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.

lugat = {
    'ism': 'Sardor',
    'yosh': 20,
    'manzil': "Toshkent sh",
}
del lugat['ism']
print(lugat)

Natija:

{'yosh': 25, 'manzil': 'Toshkent sh'}

19-misol.

lugat = {
    'ism': 'Sardor',
    'yosh': 20,
    'manzil': "Toshkent sh",
}
del lugat # lug'at to'liq xotiradan o'chirildi.
print(lugat)

Natija:

NameError: name 'lugat' is not defined

20-misol.

lugat = {
    'ism': 'Sardor',
    'yosh': 20,
    'manzil': "Toshkent sh",
}
lugat.clear()
print(lugat)

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.

lugat = {
    'ism': 'Sardor',
    'yosh': 20,
    'manzil': "Toshkent sh",
}
for x in lugat:
    print(x)

Natija:

ism
yosh
manzil

Yuqoridagi misolda for sikl operatori lug'atning barcha kalit(key)larini chop qildi, quyida shu kalitlardan foydalanib qiymatlarni chop qilishni ko'ramiz.

22-misol.

lugat = {
    'ism': 'Sardor',
    'yosh': 20,
    'manzil': "Toshkent sh",
}
for x in lugat:
    print(lugat[x])

Natija:

Sardor
20
Toshkent sh

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.

lugat = {
    'ism': 'Sardor',
    'yosh': 20,
    'manzil': "Toshkent sh",
}
for x in lugat.values():
    print(x)

Natija:

Sardor
20
Toshkent sh

Quyida kalit(key)larni alohida olish.

24-misol.

lugat = {
    'ism': 'Sardor',
    'yosh': 20,
    'manzil': "Toshkent sh",
}
for x in lugat.keys():
    print(x)

Natija:

ism
yosh
manzil

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:

ism Sardor
yosh 20
manzil Toshkent sh

Ozroq formatlaymiz:

26-misol.

lugat = {
    'ism': 'Sardor',
    'yosh': 20,
    'manzil': "Toshkent sh",
}
for k, v in lugat.items():
    print('kalit =', k, 'Qiymat =', v)

Natija:

kalit = ism Qiymat = Sardor
kalit = yosh Qiymat = 20
kalit = manzil Qiymat = Toshkent sh

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:

{'nomi': 'Tarix', 'orinlar_soni': 20, 'jihozlar': '10 ta stol, 20 stul, Monitor'}

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:

Tarix

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()

my_dict = {"name": "Ali", "age": 25, "city": "Tashkent"}
my_dict.clear()
print(my_dict)

copy()

my_dict = {"name": "Ali", "age": 25, "city": "Tashkent"}
my_copy = my_dict.copy()
print(my_copy)

fromkeys()

keys = ["a", "b", "c"]
value = 0
new_dict = dict.fromkeys(keys, value)
print(new_dict)

get()

my_dict = {"name": "Ali", "age": 25, "city": "Tashkent"}
age = my_dict.get("age")
print(age) 

items()

my_dict = {"name": "Ali", "age": 25, "city": "Tashkent"}
items = my_dict.items()
print(items)

keys()

my_dict = {"name": "Ali", "age": 25, "city": "Tashkent"}
keys = my_dict.keys()
print(keys)

pop()

my_dict = {"name": "Ali", "age": 25, "city": "Tashkent"}
my_dict.pop("age")
print(my_dict)

popitem()

my_dict = {"name": "Ali", "age": 25, "city": "Tashkent"}
my_dict.popitem()
print(my_dict)

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)

values()

my_dict = {"name": "Ali", "age": 25, "city": "Tashkent"}
values = my_dict.values()
print(values)