InfoBook.ro ← Harta anului
Modul 09 · Modele mixte de organizare a datelor
Modul 09 · Conținut 1.4

Structuri în structuri

Ai toate cărămizile: liste, șiruri, mulțimi, dicționare. Datele reale însă sunt ÎMBRICATE — o comandă online are un client, o listă de produse și un total. Modelele mixte combină cărămizile ca să descrie lumea așa cum e.

🎯 Obiectiv 1Alegi modelul potrivit: listă de liste, dicționar de liste, listă de dicționare.
🎯 Obiectiv 2Citești accesul în adâncime: orar["Luni"][0], comenzi[1]["client"] — pas cu pas.
🎯 Obiectiv 3Prelucrezi structuri mixte: filtrări, medii, totaluri — exemplele programei.
1

Trei combinații care acoperă aproape orice

Regula: structura EXTERIOARĂ răspunde la „cum ajung la date?", cea INTERIOARĂ la „ce conține fiecare?".

listă de liste

Tabel: rândurile au ORDINE, nu nume. Matricea din Modulul 06!

note = [[9,10],[7,8,10]]
note[1][2] # 10

dicționar de liste

Categorii cu NUME, fiecare cu mai multe valori. Orarul!

orar = {"Luni": ["Info","Mate"]}
orar["Luni"][0] # "Info"

listă de dicționare

Multe „fișe" cu aceleași câmpuri. Comenzile online!

c = [{"client":"Ana","total":75}]
c[0]["client"] # "Ana"
Cum aleg? Pui întrebarea de acces. „A câta oră de LUNI?" → cheia e ziua (dict), orele au ordine (list) → dicționar de liste. „A treia COMANDĂ?" → comenzile au ordine (list), fiecare are câmpuri cu nume (dict) → listă de dicționare.
2

Dicționarul de liste: orarul viu

Cheia = ziua; valoarea = LISTA orelor, în ordinea din orar. Apasă o zi:

alege o zi 👆
1orar = {"Luni": ["Info", "Mate", "Română"],
2 "Marți": ["Engleză", "Info", "Sport"],
3 "Miercuri": ["Mate", "Fizică"],
4 "Joi": ["Info", "Chimie", "Istorie"],
5 "Vineri": ["Mate", "Info"]}
6print(orar["Joi"][0]) # prima oră de joi
7orar["Vineri"].append("Sport") # valorile sunt liste → au metode de list!
De câte ori pe săptămână avem Info? sum(ore.count("Info") for ore in orar.values()) — parcurgem VALORILE (liste) și numărăm în fiecare. Dicționar + list, umăr la umăr.
3

Lista de dicționare: comenzile online

Exemplul programei: fiecare comandă = o „fișă" (dict) cu aceleași câmpuri; toate fișele stau într-o listă. Filtrează:

apasă un filtru 👆
1for c in comenzi:
2 if c["total"] > 100:
3 print(c["client"], c["total"])
Al doilea exemplu al programei — catalogul: catalog = {"Ana": [9, 10, 8], "Dan": [7, 9]} — dicționar de liste: elevul e cheia (unic, ca la M08!), notele sunt lista. Media Anei: sum(catalog["Ana"]) / len(catalog["Ana"]).
4

Accesul în adâncime — citit de la stânga la dreapta

Orice expresie cu mai mulți indici se evaluează pas cu pas, un „strat" o dată. Alege o expresie și urmărește coborârea:

Capcana straturilor: fiecare pereche de paranteze coboară UN nivel. orar["Joi"] e o LISTĂ (nu o oră!) — abia [0] scoate ora. Întreabă-te la fiecare pas: „ce TIP am acum în mână?"
5

Verificare rapidă

Cinci întrebări despre modelele mixte.

6

Fișa de sinteză

Modelele mixte, condensate.

Listă de liste: tabel — rânduri cu ordine, fără nume. note[i][j]. (Matricea din M06, în Python.)
Dicționar de liste: categorii cu nume, fiecare cu mai multe valori — orar, catalog. d[cheie][poziție].
Listă de dicționare: multe fișe cu aceleași câmpuri — comenzi, utilizatori. l[i]["câmp"].
Alegerea: pune întrebarea de acces — nume → dict la exterior; ordine/număr → list la exterior.
Accesul în adâncime: stânga → dreapta, un strat pe pas; verifică mereu ce TIP ai după fiecare strat.
Valorile interioare păstrează metodele lor: orar["Vineri"].append(…), catalog["Ana"].count(10).
Ai închis capitolul „Date"! Modelele 1.1–1.4 din programă sunt complete. Urmează capitolul „Metode": recursivitatea — funcția care se cheamă pe sine.
← anteriorModul 08 · Dicționare & clasa dict urmează →Modul 10 · Recursivitate