Ce face collections.ChainMap
ChainMap(d1, d2, d3) nu copiază nimic: la citire caută cheia întâi în d1, apoi în d2 și așa mai departe. Este perfect pentru setări pe niveluri: argumentele din linia de comandă peste variabilele de mediu peste valorile implicite.
Scrierile, actualizările și ștergerile (pop, popitem, clear) afectează doar primul dicționar. new_child() creează un ChainMap nou cu un dicționar în față, iar parents dă lanțul fără primul. get(), copy() (copiază primul dicționar) și fromkeys() funcționează ca la dicționare.
Parametri
| Parametru | Descriere |
|---|---|
*maps |
Dicționarele, în ordinea priorității. |
Ce returnează
Un obiect ChainMap.
Exemple
Exemplul 1: Setări pe niveluri
from collections import ChainMap
implicite = {"limba": "en", "tema": "luminoasă", "font": 12}
utilizator = {"limba": "ro"}
setari = ChainMap(utilizator, implicite)
print(setari["limba"], setari["font"], setari.get("culoare", "-"))
setari["font"] = 14
print(utilizator, implicite["font"])
print(dict(setari))
Rezultat
ro 12 -
{'limba': 'ro', 'font': 14} 12
{'limba': 'ro', 'tema': 'luminoasă', 'font': 14}
Exemplul 2: new_child, parents și metodele de ștergere
from collections import ChainMap
global_ = {"x": 1}
local = ChainMap(global_).new_child({"x": 2, "y": 3})
print(local["x"], local.parents["x"])
print(local.pop("y"), local.popitem(), local.maps)
local.clear()
print(local, ChainMap.fromkeys("ab", 0), local.copy())
Rezultat
2 1
3 ('x', 2) [{}, {'x': 1}]
ChainMap({}, {'x': 1}) ChainMap({'a': 0, 'b': 0}) ChainMap({}, {'x': 1})
Greșeli frecvente
- Te aștepți ca
cm["cheie"] = valoaresă schimbe dicționarul în care se află deja cheia. Scrierea merge mereu în primul dicționar.
Comenzi înrudite
dict.update() și operatorul |: Adaugă sau suprascrie mai multe chei deodată, dintr-un alt dicționar sau din perechi.dict (dicționare): Dicționarul păstrează perechi cheie: valoare și găsește rapid valoarea după cheie.collections.OrderedDict: Dicționar care pune accent pe ordinea cheilor și permite mutarea lor la capete.