Məzmuna keç
Educora
Orta16 dəq8 / 42

Lüğətlər

Məlumatı «açar: qiymət» cütləri şəklində saxla: lüğət yarat, onu dəyiş, üzərində dövr qur və saymaq üçün istifadə et.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • Lüğət yaratmaq və qiymətə açar vasitəsilə müraciət etmək
  • Cüt əlavə etmək, dəyişmək və silmək, get() ilə təhlükəsiz oxumaq
  • items() ilə lüğət üzərində dövr qurmaq və lüğətlə tezlik saymaq

Telefonundakı kontaktları düşün: «Ana» adını axtarırsan və nömrəni dərhal görürsən — kontaktın siyahıda neçənci olduğunu bilmək lazım deyil. Adi lüğətdə də belədir: sözü tapırsan, yanında mənası yazılıb. Python-da bu cür məlumat lüğət (dict) ilə saxlanılır: hər qiymətin öz açarı var.

Lüğət yaratmaq

Tərif
Lüğət (dict)

Fiqurlu mötərizədə {} yazılan açar: qiymət cütləri toplusu. Qiymət indekslə deyil, açarla tapılır: student['name'].

Python
student = {'name': 'Leyla', 'age': 14, 'city': 'Ganja'}
print(student)
print(student['name'])
print(len(student))
print(student.get('email'))
print(student.get('email', 'no email'))
▸ Gözlənilən nəticə
{'name': 'Leyla', 'age': 14, 'city': 'Ganja'}
Leyla
3
None
no email

Lüğətdə olmayan açarı student['email'] kimi oxusan, Python KeyError xətası verəcək. get() metodu isə xəta vermir: açar yoxdursa, None (Python-da «heç nə» mənasını verən xüsusi qiymət) və ya ikinci arqument kimi verdiyin qiyməti qaytarır.

Lüğəti dəyişmək

Yeni cüt əlavə etmək və mövcud qiyməti dəyişmək eyni cür yazılır: student['age'] = 15. Açar varsa, qiymət yenilənir; yoxdursa, yeni cüt yaranır. del cütü silir, in isə açarın lüğətdə olub-olmadığını yoxlayır.

Python
student = {'name': 'Leyla', 'age': 14}
student['age'] = 15
student['grade'] = 9
print(student)

del student['grade']
print('grade' in student, 'name' in student)
▸ Gözlənilən nəticə
{'name': 'Leyla', 'age': 15, 'grade': 9}
False True

Lüğət üzərində dövr

keys() bütün açarları, values() bütün qiymətləri, items() isə (açar, qiymət) cütlərini verir. items() ilə dövrdə hər cütü dərhal iki dəyişənə açmaq olar — kortejlər dərsindəki kimi.

Python
prices = {'bread': 0.8, 'milk': 1.9, 'cheese': 6.5}
for item, price in prices.items():
    print(f'{item}: {price:.2f} AZN')

print('Items:', list(prices.keys()))
print(f'Total: {sum(prices.values()):.2f} AZN')
▸ Gözlənilən nəticə
bread: 0.80 AZN
milk: 1.90 AZN
cheese: 6.50 AZN
Items: ['bread', 'milk', 'cheese']
Total: 9.20 AZN
1 / 6

Lüğətlə saymaq

Lüğətlərin ən faydalı tətbiqlərindən biri nəyinsə neçə dəfə göründüyünü saymaqdır. Hər söz üçün counts.get(word, 0) + 1 yazırıq: söz ilk dəfə görünəndə get 0 qaytarır, sonrakı dəfələrdə isə köhnə saya 1 əlavə olunur.

Python
text = 'the cat and the dog and the bird'
counts = {}
for word in text.split():
    counts[word] = counts.get(word, 0) + 1
print(counts)
print('the:', counts['the'])
▸ Gözlənilən nəticə
{'the': 3, 'cat': 1, 'and': 2, 'dog': 1, 'bird': 1}
the: 3

İç-içə strukturlar

Lüğətin qiyməti istənilən tip ola bilər — məsələn, siyahı. Belə quruluşla elektron jurnal düzəltmək olar: açar şagirdin adı, qiymət isə onun qiymətləri siyahısıdır.

Python
journal = {
    'Aysel': [5, 4, 5],
    'Murad': [4, 3, 4],
    'Nigar': [5, 5, 5],
}
for name, grades in journal.items():
    avg = sum(grades) / len(grades)
    print(f'{name}: {avg:.1f}')

journal['Murad'].append(5)
print(journal['Murad'])
▸ Gözlənilən nəticə
Aysel: 4.7
Murad: 3.7
Nigar: 5.0
[4, 3, 4, 5]

Lüğət xüsusilə bu hallarda əlverişlidir:

  • qiyməti ad və ya kod üzrə tez tapmaq: kontaktlar, məhsulların qiymətləri;
  • saymaq: sözlərin, səslərin, qiymətlərin tezliyi;
  • qruplaşdırmaq: hər sinfə öz şagird siyahısı;
  • bir şeyin xassələrini təsvir etmək: ad, yaş, şəhər.
Python
import json

student = {'name': 'Leyla', 'age': 14, 'city': 'Ganja'}
text = json.dumps(student)
print(text)

back = json.loads(text)
print(back['city'])
▸ Gözlənilən nəticə
{"name": "Leyla", "age": 14, "city": "Ganja"}
Ganja
Tapşırıq

prices lüğətinə 'tea' açarını 3.2 qiyməti ilə əlavə et, çörəyin ('bread') qiymətini isə 1.0-a dəyiş. Sonra .items() ilə hər məhsulu apple: 1.50 şəklində, sonda isə Total: sözü ilə bütün qiymətlərin cəmini çap et (qiymətlər nöqtədən sonra iki rəqəmlə).

Tapşırıq · Python
prices = {'apple': 1.5, 'bread': 0.8, 'milk': 1.9}
# 1) add tea for 3.2 and change bread to 1.0
# 2) print each item like: apple: 1.50
# 3) print Total: and the sum of all prices
▸ Gözlənilən nəticə
apple: 1.50
bread: 1.00
milk: 1.90
tea: 3.20
Total: 7.60
Tapşırıq

Sinifdə sevimli yemək üçün səsvermə keçirilib. Lüğət və .get() ilə hər yeməyin neçə səs aldığını say və yeməkləri əlifba sırası ilə dolma: 2 şəklində çap et. Sonda Winner: sözündən sonra ən çox səs toplayan yeməyin adını çap et.

Tapşırıq · Python
votes = ['plov', 'dolma', 'plov', 'kebab', 'dolma', 'plov']
counts = {}
# 1) count the votes for each dish
# 2) print the dishes in alphabetical order like: dolma: 2
# 3) print Winner: and the dish with the most votes
▸ Gözlənilən nəticə
dolma: 2
kebab: 1
plov: 3
Winner: plov

Əsas fikirlər

  • Lüğət {} içində açar: qiymət cütləridir; qiymət açarla tapılır.
  • d[key] = value cüt əlavə edir və ya qiyməti yeniləyir, del d[key] cütü silir.
  • get() olmayan açarda xəta vermir, None və ya verilən ehtiyat qiyməti qaytarır.
  • items() ilə dövr hər addımda açarı və qiyməti birlikdə verir.
  • Açarlar təkrarsız və dəyişməyən tipdə olmalıdır.

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
d = {'a': 1, 'b': 2} olarsa, d['b'] nədir?