Ачааллж байна...
Одоо хүртэл бид өгөгдлийн бүтцүүдийг ТУСАД НЬ үзсэн. List бол зүйлсийн жагсаалт. Dictionary бол нэр-утга хосуудын цуглуулга. Tuple бол тогтмол бүртгэл. Set бол давхардалгүй олонлог.
Гэвч бодит амьдралын өгөгдөл ийм цэвэрхэн байдаггүй. Бодит өгөгдөл нь үүрлэсэн байдаг: жагсаалт доторх dictionary, dictionary доторх жагсаалт, тэдгээрийн дотор дахин жагсаалт.
Жишээ нь "сургуулийн сурагчид" гэсэн өгөгдлийг төсөөлье. Сурагч бүр нэр, нас, ангитай — тэр бол dictionary. Гэхдээ сурагч НЭГ биш, ОЛОН байна — тэгэхээр dictionary-уудын ЖАГСААЛТ. Мөн сурагч бүр хэдэн хичээл үздэг — тэгэхээр dictionary дотор ЖАГСААЛТ байна.
Энэ хичээлийн зорилго бол тийм бүтцийг айхгүйгээр унших, өөрчлөх, дотор нь шүүх чадвар олгох явдал юм. Бид үүнийг УДААН, алхам алхмаар хийнэ.
Мөн би энэ хичээлд нэг зүйлийг чангаар хэлэх болно, түүнийг сайн санаж яваарай: энэ бүтэц бол ЯГ JSON-ы хэлбэр юм. JSON бол дараагийн бүлгийн сэдэв, мөн интернэтийн бүх программ хоорондоо ярихад ашигладаг формат (Бүлэг 11). Тэгэхээр энэ хичээл бол зөвхөн Python-ы дасгал биш — энэ бол таны цаашдын бүх ажлын суурь юм.
Шошготой хайрцгийн зүйрлэлийг дахин ашиглая.
Одоохондоо бид хайрцаг дотор ЭНГИЙН зүйл байна гэж үзсэн: тоо, текст, эсвэл жижиг зүйлсийн эгнээ.
Гэвч хайрцаг дотор ӨӨР ХАЙРЦАГ байж болно. Тэр хайрцаг дотор дахин хайрцаг байж болно.
Агуулах төсөөлье. Танд "Сурагчид" гэсэн шошготой том хайрцаг байна. Түүнийг нээхэд дотор нь олон жижиг хайрцаг байна — сурагч бүрд нэг. Жижиг хайрцаг бүрийг нээхэд дотор нь хэдэн тасалгаа байна: "Нэр", "Нас", "Анги", "Хичээлүүд". Сүүлчийн тасалгааг нээхэд дотор нь ДАХИН олон жижиг зүйл байна — хичээлүүдийн жагсаалт.
Ямар ч гүн байсан, дүрэм нэг л хэвээрээ: нэг давхарга нээж, дотор нь юу байгааг хараад, дараагийн давхарга руу ор. Хэзээ ч бүх бүтцийг нэг дор ойлгох гэж бүү оролдоорой. Нэг давхарга, дараа нь дараагийнх.
Энэ хичээлийн бүх арга барил тэр зарчим дээр тулгуурлана.
Хамгийн түгээмэл үүрлэсэн бүтэц бол энэ.
python
suragchid: list[dict[str, str | int]] = [
{"ner": "Болд", "nas": 16, "angi": "10а"},
{"ner": "Сараа", "nas": 17, "angi": "10б"},
{"ner": "Төмөр", "nas": 16, "angi": "10а"},
]Бүтцийг ГАДНААС ДОТОГШОО уншъя.
Хамгийн гадна талд дөрвөлжин хаалт байна — тэгэхээр энэ бол жагсаалт. Жагсаалт дотор гурван зүйл байна, таслалаар тусгаарлагдсан.
Тэдгээр гурван зүйл тус бүр нь буржгар хаалттай — тэгэхээр тус бүр нь dictionary. Dictionary бүрд гурван key байна: "ner", "nas", "angi".
Hint нь list[dict[str, str | int]] — "dictionary-уудын жагсаалт; dictionary бүрийн key нь string, value нь string эсвэл бүхэл тоо."
(Бүлэг 4-т хэлсэнчлэн энэ hint нь МУУХАЙ. Тэр нь ямар key ямар төрөлтэйг хэлээгүй. Бүлэг 9-д dataclass ашиглан үүнийг цэвэрхэн болгоно. Одоохондоо энэ hint-тэй ажиллана.)
python
print(suragchid[0]){'ner': 'Болд', 'nas': 16, 'angi': '10а'}suragchid[0] нь ЭХНИЙ элементийг өгсөн. Тэр элемент нь DICTIONARY.
Одоохондоо энэ нь ердийн жагсаалт руу хандах явдал юм — Курс 1-ээс танил. Ямар ч шинэ зүйл алга.
Одоо тэр dictionary-аас утга авъя.
python
negdugeer = suragchid[0]
print(negdugeer["ner"])БолдДахин танил зүйл. Хоёр мөрөнд хоёр АЛХАМ хийсэн: эхлээд жагсаалтаас dictionary авав, дараа нь dictionary-аас утга авав.
Одоо тэдгээрийг НЭГТГЭЕ:
python
print(suragchid[0]["ner"])БолдЭнэ бол үүрлэсэн бүтцийн үндсэн бичлэг. Зүүнээс баруун тийш уншаарай:
suragchid — жагсаалт
[0] — түүний эхний элемент (dictionary)
["ner"] — тэр dictionary-ийн "ner" key
Хамгийн чухал зөвлөгөө: хэрэв ийм гинж танд ойлгомжгүй санагдвал, түүнийг ХОЁР МӨР болгож задал. Эхлээд negdugeer = suragchid[0], дараа нь negdugeer["ner"]. Дараа нь print(negdugeer) хийж юу байгааг ХАРААРАЙ. Тэгээд дараагийн алхам руу ор.
Энэ бол эхлэгч ба туршлагатай программистын хоорондох цорын ганц ялгаа: туршлагатай нь гинжийг нэг дор бичдэг, эхлэгч нь задалдаг. Хоёулаа зөв. Задлах нь ичих зүйл биш — тэр бол ойлгох арга.
python
for suragch in suragchid:
print(f"{suragch['ner']}, {suragch['nas']} настай, {suragch['angi']} анги")Болд, 16 настай, 10а анги
Сараа, 17 настай, 10б анги
Төмөр, 16 настай, 10а ангиLoop эргэх бүрд suragch нь НЭГ DICTIONARY болно. Дараа нь бид түүнээс key-ээр утга авч байна.
f-string дотор suragch['ner'] гэж бичсэнийг анзаараарай — ганц хашилт ашигласан. Учир нь f-string нь давхар хашилтаар эхэлсэн (f"..."), тиймээс дотор нь давхар хашилт бичвэл эрт дуусах болно. Ганц хашилт нь тэр асуудлыг шийднэ. (Python 3.12-ээс эхлэн энэ хязгаарлалт арилсан, гэхдээ ганц хашилт ашиглах нь илүү аюулгүй, илүү нийтлэг.)
Одоо бүтцийг ГҮНЗГИЙРҮҮЛЬЕ. Сурагч бүр хэдэн хичээл үздэг гэж бодъё.
python
suragchid: list[dict[str, str | int | list[str]]] = [
{
"ner": "Болд",
"nas": 16,
"khichelluud": ["математик", "физик", "англи"],
},
{
"ner": "Сараа",
"nas": 17,
"khichelluud": ["математик", "хими"],
},
]Одоо dictionary дотор жагсаалт байна.
Hint нь бүр ч муухай боллоо: list[dict[str, str | int | list[str]]]. Гурван боломжит төрөл! Энэ бол Бүлэг 9-ийн dataclass рүү хөтлөх шууд дохио — гэхдээ одоохондоо тэсээрэй.
Гүн рүү хандъя:
python
print(suragchid[0]["khichelluud"])
print(suragchid[0]["khichelluud"][0])['математик', 'физик', 'англи']
математикГинжийг задалъя:
suragchid — жагсаалт
[0] — эхний сурагч (dictionary)
["khichelluud"] — тэр сурагчийн хичээлүүд (жагсаалт)
[0] — тэр жагсаалтын эхний хичээл (string)
Дөрвөн алхам. Хэрэв ойлгомжгүй бол — задлаарай:
python
negdugeer = suragchid[0]
print(negdugeer)
khichelluud = negdugeer["khichelluud"]
print(khichelluud)
negdugeer_khicheel = khichelluud[0]
print(negdugeer_khicheel){'ner': 'Болд', 'nas': 16, 'khichelluud': ['математик', 'физик', 'англи']}
['математик', 'физик', 'англи']
математикАлхам бүрд ЮУ БАЙГААГ хараарай. Энэ бол үүрлэсэн бүтэцтэй ажиллах хамгийн найдвартай арга — таамаглахгүй, ХАРАХ.
Бүх сурагчийн бүх хичээлийг хэвлэе.
python
for suragch in suragchid:
print(f"{suragch['ner']}:")
for khicheel in suragch["khichelluud"]:
print(f" - {khicheel}")Болд:
- математик
- физик
- англи
Сараа:
- математик
- химиГадна loop нь сурагч бүрийг эргүүлж байна. Дотор loop нь ТЭР СУРАГЧИЙН хичээл бүрийг эргүүлж байна.
Догол мөрийг анхааралтай хараарай — тэр нь бүтцийг харуулж байна. Дотор loop нь гадна loop-ийн ДОТОР байна, тиймээс тэр нь гадна loop эргэх БҮРД дахин бүтнээрээ ажиллана.
Хоёр давхар loop нь эхэндээ толгой эргүүлэм санагдаж болно. Гэхдээ логик нь энгийн: гадна давхарга дээр loop хийж, дотор давхаргад орж, тэнд дахин loop хийнэ. Бүтэц гүнзгийрэх тусам loop нэмэгдэнэ.
Өөр төрлийн үүрлэлт:
python
angi: dict[str, dict[str, int]] = {
"10а": {"suragchdiin_too": 25, "bagshiin_too": 8},
"10б": {"suragchdiin_too": 23, "bagshiin_too": 7},
}
print(angi["10а"])
print(angi["10а"]["suragchdiin_too"]){'suragchdiin_too': 25, 'bagshiin_too': 8}
25Hint нь dict[str, dict[str, int]] — "key нь string, value нь ӨӨР DICTIONARY (key нь string, value нь тоо)."
Loop:
python
for angiin_ner, medeelel in angi.items():
print(f"{angiin_ner}: {medeelel['suragchdiin_too']} сурагч, {medeelel['bagshiin_too']} багш")10а: 25 сурагч, 8 багш
10б: 23 сурагч, 7 багш.items() нь key ба value-г хамт өгч байна (Бүлэг 2-оос танил). medeelel нь ДОТООД dictionary болж байна.
Дахин өөр хослол:
python
anginuud: dict[str, list[str]] = {
"10а": ["Болд", "Төмөр", "Дулмаа"],
"10б": ["Сараа", "Цэцэг"],
}
for angiin_ner, suragchid_neres in anginuud.items():
print(f"{angiin_ner} ({len(suragchid_neres)} сурагч):")
for ner in suragchid_neres:
print(f" - {ner}")10а (3 сурагч):
- Болд
- Төмөр
- Дулмаа
10б (2 сурагч):
- Сараа
- ЦэцэгЭнэ бол маш түгээмэл бүтэц: "бүлэг → гишүүд." Ангиуд ба сурагчид, ангилал ба бараанууд, зохиогч ба номууд — бүгд ижил хэлбэртэй.
Одоо унших биш, ӨӨРЧЛӨХ рүү орно. Энд нэг чухал баримт байна.
python
suragchid: list[dict[str, str | int]] = [
{"ner": "Болд", "nas": 16},
{"ner": "Сараа", "nas": 17},
]
suragchid[0]["nas"] = 17
print(suragchid)[{'ner': 'Болд', 'nas': 17}, {'ner': 'Сараа', 'nas': 17}]Ажиллалаа. suragchid[0]["nas"] = 17 нь эхний сурагчийн насыг өөрчилсөн.
Яагаад ажиллаж байна вэ? Учир нь suragchid[0] нь dictionary-гийн ХУУЛБАР биш, харин ЖИНХЭНЭ dictionary руу заана. Түүнийг өөрчилвөл жагсаалт доторх dictionary өөрчлөгдөнө.
Энэ бол Бүлэг 2-ын slicing хичээлийн huulbar = anhnii -ийн сургамжтай ижил зарчим. Python-д нэр нь объектыг ЗААДАГ, хуулдаггүй.
Хэдэн жишээ нэмье:
python
suragchid = [
{"ner": "Болд", "khichelluud": ["математик"]},
]
# Шинэ хичээл нэмэх
suragchid[0]["khichelluud"].append("физик")
print(suragchid)
# Шинэ key нэмэх
suragchid[0]["angi"] = "10а"
print(suragchid)
# Шинэ сурагч нэмэх
suragchid.append({"ner": "Сараа", "khichelluud": [], "angi": "10б"})
print(suragchid)[{'ner': 'Болд', 'khichelluud': ['математик', 'физик']}]
[{'ner': 'Болд', 'khichelluud': ['математик', 'физик'], 'angi': '10а'}]
[{'ner': 'Болд', 'khichelluud': ['математик', 'физик'], 'angi': '10а'}, {'ner': 'Сараа', 'khichelluud': [], 'angi': '10б'}]Гурван өөр өөрчлөлт, бүгд ажиллаж байна. Дүрэм нь энгийн: гүн рүү нь хүрч очоод, дараа нь ердийн үйлдэл хий. Ямар ч тусгай бичлэг шаардлагагүй.
python
suragchid: list[dict[str, str | int]] = [
{"ner": "Болд", "nas": 16},
{"ner": "Сараа", "nas": 17},
]
for suragch in suragchid:
suragch["nas"] = suragch["nas"] + 1
print(suragchid)[{'ner': 'Болд', 'nas': 17}, {'ner': 'Сараа', 'nas': 18}]Бүх сурагчийн нас нэгээр нэмэгдлээ. Loop доторх suragch нь ХУУЛБАР биш — тэр нь жинхэнэ dictionary руу заана, тиймээс түүнийг өөрчилвөл эх өгөгдөл өөрчлөгдөнө.
Энэ нь заримдаа гэнэтийн байдаг. Хэрэв та эх өгөгдлөө өөрчлөхийг ХҮСЭХГҮЙ бол — эхлээд хуулбар хий (Бүлэг 2-ын [:] эсвэл .copy()).
Одоо Бүлэг 2-ын мэдлэг үүрлэсэн бүтэц дээр ажиллаж эхэлнэ.
python
suragchid: list[dict[str, str | int]] = [
{"ner": "Болд", "nas": 16, "angi": "10а"},
{"ner": "Сараа", "nas": 17, "angi": "10б"},
{"ner": "Төмөр", "nas": 16, "angi": "10а"},
]
# 10а ангийн сурагчид
angi_10a = [s for s in suragchid if s["angi"] == "10а"]
print(angi_10a)
# Зөвхөн нэрс
neres = [s["ner"] for s in suragchid]
print(neres)
# 17 ба түүнээс дээш настай сурагчдын нэрс
akhmad = [s["ner"] for s in suragchid if s["nas"] >= 17]
print(akhmad)[{'ner': 'Болд', 'nas': 16, 'angi': '10а'}, {'ner': 'Төмөр', 'nas': 16, 'angi': '10а'}]
['Болд', 'Сараа', 'Төмөр']
['Сараа']Энэ бол Бүлэг 6-ийн JSON өгөгдөл шүүх, Бүлэг 11-ийн API хариу боловсруулах ЯГ ТЭР бичлэг юм. Тэр үед suragchid нь гар бичмэл жагсаалт биш, харин файлаас эсвэл интернэтээс уншсан жинхэнэ өгөгдөл байх ч — бичлэгийн хэлбэр яг ижилхэн байна.
Эрэмбэлэх ч бас (Бүлэг 3.5-ын sorted ба lambda):
python
nasnaas = sorted(suragchid, key=lambda s: s["nas"], reverse=True)
for s in nasnaas:
print(f"{s['ner']}: {s['nas']}")Сараа: 17
Болд: 16
Төмөр: 16Илүү нарийн жишээ: бүх сурагчийн үзэж байгаа БҮХ хичээлийн ӨВӨРМӨЦ жагсаалт гаргая.
python
suragchid: list[dict[str, str | list[str]]] = [
{"ner": "Болд", "khichelluud": ["математик", "физик", "англи"]},
{"ner": "Сараа", "khichelluud": ["математик", "хими"]},
{"ner": "Төмөр", "khichelluud": ["физик", "англи", "түүх"]},
]
buk_khicheel: set[str] = set()
for suragch in suragchid:
for khicheel in suragch["khichelluud"]:
buk_khicheel.add(khicheel)
print(sorted(buk_khicheel))['англи', 'математик', 'түүх', 'физик', 'хими']Энд өмнөх хичээлийн set ажилд орлоо. Бид давхардлыг гараар шалгах шаардлагагүй — set нь өөрөө устгана. Дараа нь sorted() нь тогтмол дараалал өгч байна.
Хэрэв та математик үздэг сурагчдын нэрсийг хүсвэл:
python
matematikchid = [
s["ner"] for s in suragchid if "математик" in s["khichelluud"]
]
print(matematikchid)['Болд', 'Сараа']"математик" in s["khichelluud"] — энэ бол Курс 1-ийн in оператор жагсаалт дээр ажиллаж байна. Comprehension нь гүн бүтцэд шууд хүрч байна.
Одоо би энэ хичээлийн хамгийн чухал өгүүлбэрийг хэлье.
Дээрх бүх бүтэц — dictionary-уудын жагсаалт, dictionary доторх жагсаалт, dictionary доторх dictionary — ЯГ ЭНЭ ХЭЛБЭРЭЭР JSON бичигддэг.
JSON гэдэг нь программууд хоорондоо өгөгдөл солилцоход ашигладаг формат юм (дараагийн бүлгийн сэдэв). Түүнийг ЯМАР ЧХЭЛ дээр бичсэн программ уншиж чадна — Python, JavaScript, Java, C#, бүгд.
Хэрэв та цаг агаарын API-аас (Бүлэг 11) өгөгдөл татвал, тэр өгөгдөл нь яг ийм хэлбэрээр ирнэ:
python
{
"hot": "Улаанбаатар",
"odoo": {
"temperatur": -12,
"chiiglegdel": 45,
},
"urgeljleh": [
{"udur": "Даваа", "temperatur": -10},
{"udur": "Мягмар", "temperatur": -15},
],
}Танил харагдаж байна уу? Dictionary дотор dictionary, dictionary дотор dictionary-уудын жагсаалт. Яг энэ хичээлд үзсэн зүйл.
Тэгэхээр:
python
print(hariult["odoo"]["temperatur"])
print(hariult["urgeljleh"][0]["udur"])-12
ДавааТа ЯГ ОДОО тэр өгөгдлийг уншиж чадна. Дараагийн бүлэгт бид зөвхөн түүнийг ХААНААС АВАХ, ФАЙЛД ХЭРХЭН ХАДГАЛАХ талаар сурна — уншиж, өөрчлөх чадвар тань аль хэдийн бэлэн.
Энэ бол энэ хичээлийн жинхэнэ ач холбогдол. Та зөвхөн Python-ы дасгал хийгээгүй — та ИНТЕРНЭТИЙН өгөгдлийн хэлийг уншиж сурсан.
Бодит өгөгдөл нь төгс биш. Заримдаа key байхгүй байдаг.
python
suragchid: list[dict[str, str | int]] = [
{"ner": "Болд", "nas": 16, "angi": "10а"},
{"ner": "Сараа", "nas": 17}, # angi байхгүй!
]
for suragch in suragchid:
print(f"{suragch['ner']}: {suragch['angi']}")Болд: 10а
Traceback (most recent call last):
File "main.py", line 8, in <module>
print(f"{suragch['ner']}: {suragch['angi']}")
KeyError: 'angi'KeyError: 'angi' — "angi гэсэн key байхгүй." Программ унасан.
Шийдэл нь Бүлэг 4-өөс танил .get():
python
for suragch in suragchid:
angi = suragch.get("angi", "тодорхойгүй")
print(f"{suragch['ner']}: {angi}")Болд: 10а
Сараа: тодорхойгүйЭнэ бол интернэтээс өгөгдөл татахад (Бүлэг 11) ЗААВАЛ хэрэгтэй болох зуршил. API нь заримдаа талбар оруулахгүй байдаг, тэр нь алдаа биш — тэр бол хэвийн зүйл.
Гүн бүтцэд .get() -ийг гинжлэн ашиглаж болно, гэхдээ анхаарал шаардана:
python
hariult: dict[str, dict[str, int]] = {"odoo": {"temperatur": -12}}
print(hariult.get("odoo", {}).get("temperatur", 0))
print(hariult.get("margaash", {}).get("temperatur", 0))-12
0Хоёр дахь мөрөнд "margaash" key байхгүй тул .get() нь ХООСОН DICTIONARY ({}) буцаасан. Дараа нь тэр хоосон dictionary дээр дахин .get() дуудахад 0 буцаасан. Программ унасангүй.
Энэ хэв маягийг санаж яваарай — Бүлэг 11-д API-гийн хариу боловсруулахад маш хэрэгтэй болно.
Хэрэв сонирхвол: дээрх сурагчдын өгөгдөл дээр дараах асуултуудад хариулах кодыг өөрөө бичиж үзээрэй.
Хамгийн олон хичээл үздэг сурагч хэн бэ? (Сануулга: max ба key=lambda)
Ямар хичээлийг хамгийн олон сурагч үздэг вэ? (Сануулга: dictionary-д тоолох)
10а ангийн сурагчдын дундаж нас хэд вэ?
Хариултаа бичээд ажиллуулж шалгаарай. Хэрэв гүн бүтцэд төөрвөл — задлаарай. Мөр мөрөөр нь print хийж, юу байгааг хараарай.
Мөн хүсвэл: өөрийн сонирхлын өгөгдлийг (номнууд, кино, дуу) үүрлэсэн бүтэц болгож бичээд, түүнээс мэдээлэл гаргаж үзээрэй.
1. Давхарга алгасах
python
print(suragchid["ner"])Traceback (most recent call last):
File "main.py", line 1, in <module>
print(suragchid["ner"])
TypeError: list indices must be integers or slices, not strTypeError: list indices must be integers or slices, not str гэдэг нь "жагсаалтад string-ээр хандаж болохгүй, зөвхөн тоо эсвэл зүсмээр" гэсэн үг.
Юу болов? suragchid нь ЖАГСААЛТ, dictionary биш. Түүнд ["ner"] гэж хандах боломжгүй. Эхлээд index-ээр элемент авах хэрэгтэй: suragchid[0]["ner"].
Энэ бол хамгийн түгээмэл алдаа. Оношилгоо: алдааны мессеж "list indices" гэж хэлж байвал — та жагсаалт дээр dictionary шиг ажиллаж байна. Нэг давхарга алгассан.
2. Эсрэгээр — dictionary дээр index ашиглах
python
suragch = {"ner": "Болд"}
print(suragch[0])Traceback (most recent call last):
File "main.py", line 2, in <module>
print(suragch[0])
KeyError: 0KeyError: 0 — "0 гэсэн key байхгүй." Dictionary-д index байхгүй, зөвхөн key. Хэрэв та [0] гэж бичвэл Python түүнийг 0 гэсэн KEY гэж үзнэ.
3. Байхгүй key
KeyError: 'angi'Засвар: .get(key, default) ашигла.
4. Гүн бүтэц дэх None
python
hariult: dict[str, dict[str, int] | None] = {"odoo": None}
print(hariult["odoo"]["temperatur"])Traceback (most recent call last):
File "main.py", line 3, in <module>
print(hariult["odoo"]["temperatur"])
TypeError: 'NoneType' object is not subscriptableTypeError: 'NoneType' object is not subscriptable — "None -д index/key-ээр хандаж болохгүй." Бүлэг 4.3-ын AttributeError -тэй ойролцоо алдаа: ямар нэг зүйл None болсон, та түүн дээр ажиллах гэж оролдсон.
Засвар: шалга.
python
odoo = hariult.get("odoo")
if odoo is not None:
print(odoo["temperatur"])
else:
print("Мэдээлэл байхгүй")5. Loop доторх өөрчлөлт гэнэтийн байх
python
suragchid = [{"ner": "Болд", "nas": 16}]
for suragch in suragchid:
suragch["nas"] = 99
print(suragchid)[{'ner': 'Болд', 'nas': 99}]Алдаа биш, гэхдээ эх өгөгдөл өөрчлөгдсөн. Хэрэв та түүнийг хүсээгүй бол хуулбар хий.
Бодит өгөгдөл нь үүрлэсэн байдаг: dictionary-уудын жагсаалт, dictionary доторх жагсаалт, dictionary доторх dictionary.
Бүтцийг гаднаас дотогшоо уншина: дөрвөлжин хаалт → жагсаалт, буржгар хаалт → dictionary.
Хандах бичлэг нь гинж: suragchid[0]["khichelluud"][1] — жагсаалт → dictionary → жагсаалт.
Эргэлзвэл ЗАДАЛ. Гинжийг мөр мөрөөр нь бичиж, тус бүрд print хийж, юу байгааг ХАРААРАЙ. Энэ бол ичих зүйл биш, зөв арга.
Гүн бүтцийг өөрчлөх нь ижил бичлэгээр: гүн рүү хүрч очоод, дараа нь ердийн үйлдэл (= утга, .append(), шинэ key).
Loop доторх элемент нь ХУУЛБАР биш — түүнийг өөрчилвөл эх өгөгдөл өөрчлөгдөнө.
Comprehension, sorted, set — бүгд гүн бүтцэд шууд ажиллана: [s["ner"] for s in suragchid if s["nas"] >= 17].
KeyError нь key байхгүйг, TypeError: list indices must be integers нь давхарга алгассныг илтгэнэ.
Бодит өгөгдөлд key байхгүй байж болно → .get(key, default) ашигла. Гүн бүтцэд гинжлэн: .get("odoo", {}).get("temperatur", 0).
ХАМГИЙН ЧУХАЛ: энэ бүтэц бол ЯГ JSON-ы хэлбэр. Та ЯГ ОДОО интернэтийн өгөгдлийг уншиж чадна. Дараагийн бүлгүүдэд зөвхөн түүнийг хаанаас авах, хаана хадгалахыг сурна.
Дараагийн хичээлээр Бүлэг 5 дуусна. Тэнд шинэ бичлэг байхгүй — зөвхөн ШИЙДВЭР. "Энэ өгөгдөлд list, tuple, set, dictionary-гийн аль нь тохирох вэ?" гэсэн асуултад хариулах практик гарын авлага. Тэр асуулт нь энгийн мэт санагдана, гэхдээ буруу бүтэц сонгосон код нь удаан, ойлгомжгүй, алдаатай байдаг. Зөв сонголт нь бүх зүйлийг хялбар болгодог.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.