Луғатҳо
Рӯйхат қиматҳоро аз рӯи рақамҳо нигоҳ медорад: a[0], a[1], … Агар ҷустан на аз рӯи рақам, балки аз рӯи ном қулайтар бошад-чӣ: нарх аз рӯи номи мол, телефон аз рӯи номи одам, шумора аз рӯи калима? Барои ин луғатҳо ҳастанд.
Луғат: калид → қимат
prices = {"нон": 45, "шир": 89, "панир": 320}
print(prices["шир"]) # 89
Луғат ҷуфтҳои калид: қимат-ро нигоҳ медорад. Аз рӯи калид қимат фавран, бе гузаштан ёфт мешавад — ҳамон қадар зуд, мисли санҷиш дар маҷмӯъ.
Илова ё иваз кардани қимат:
prices["чой"] = 150 # калиди нав — ҷуфт илова мешавад
prices["нон"] = 50 # мавҷуда — қимат иваз мешавад
print(len(prices)) # 4
Калид дар луғат ҳамеша якто аст: навиштани такрорӣ аз рӯи ҳамон калид қиматро аз нав менависад.
Чунин калид нест
Муроҷиат ба калиди мавҷуднабуда — хатои KeyError:
print(prices["қаҳва"]) # KeyError
Вариантҳо:
if "қаҳва" in prices: # санҷиши калид
print(prices["қаҳва"])
print(prices.get("қаҳва")) # None — калид нест
print(prices.get("қаҳва", 0)) # 0 — қимати пешфарзи худ
Нест кардани калид: del prices["панир"] ё prices.pop("панир").
Гузаштан аз луғат
ages = {"Анис": 12, "Бахтиёр": 14, "Вафо": 13}
for name in ages: # калидҳо гузаронида мешаванд
print(name)
for name, age in ages.items(): # ҷуфтҳои калид-қимат
print(name, age)
print(list(ages.values())) # [12, 14, 13]
print(sorted(ages)) # калидҳо аз рӯи алифбо
Луғат тартиберо, ки калидҳо илова шуда буданд, дар хотир дорад. Агар тартиби дигар лозим бошад — мураттаб кун.
Ҳисоби басомадҳо
Истифодаи маъмултарини луғат — ҳисоб кардани он ки ҳар қимат чанд бор вомехӯрад:
words = "гурба саг гурба моҳӣ саг гурба".split()
count = {}
for w in words:
count[w] = count.get(w, 0) + 1
print(count) # {'гурба': 3, 'саг': 2, 'моҳӣ': 1}
count.get(w, 0) шумораи ҷориро ё 0-ро, агар калима бори аввал вохӯрда бошад, бармегардонад.
Калиди қиматаш калонтаринро бо гузаштани оддӣ ё тавассути max(count, key=count.get) ёфтан мумкин аст — вале дар хотир дор, ки ҳангоми баробарӣ max калиди аввалини чунинро бо тартиби луғат бармегардонад.
Counter
Барои ҳисоб асбоби тайёр ҳаст:
from collections import Counter
c = Counter("abracadabra")
print(c["a"]) # 5
print(c.most_common(2)) # [('a', 5), ('b', 2)]
Гурӯҳбандӣ
Қимати луғат метавонад ҳар чиз бошад, масалан рӯйхат. Ҳамин тавр маълумотро аз рӯи аломат гурӯҳбандӣ мекунанд:
words = ["анор", "бодиринг", "анҷир", "барг", "гелос"]
by_letter = {}
for w in words:
first = w[0]
if first not in by_letter:
by_letter[first] = []
by_letter[first].append(w)
print(by_letter["б"]) # ['бодиринг', 'барг']
Калид метавонад ҳар қимати тағйирнопазир бошад: адад, сатр, кортеж. Масалан, координатаҳои (x, y) — калиди хуб аст, рӯйхат бошад — не. Агар аз рӯи «маҷмӯи» қиматҳо гурӯҳбандӣ кардан лозим бошад, онро ба сатр ё кортеж табдил деҳ.
Луғат ба ҷои if-и дароз
days = {1: "дш", 2: "сш", 3: "чш", 4: "пш", 5: "ҷм", 6: "шб", 7: "яш"}
n = int(input())
print(days.get(n, "чунин рӯз нест"))
Хулоса
- луғат — ҷуфтҳои
калид: қимат, дастрасииd[калид]фаврӣ кор мекунад; - навиштан аз рӯи калиди мавҷуда қиматро иваз мекунад;
in,get(калид, пешфарз)азKeyErrorҳимоя мекунанд;items(),keys(),values()— гузаштан;d[x] = d.get(x, 0) + 1— ҳисоби басомадҳо;Counter— ҳамин, тайёр;- калидҳо — танҳо қиматҳои тағйирнопазир: ададҳо, сатрҳо, кортежҳо.