मुख्य सामग्री पर जाएं
मॉड्यूल 3 · पाठ 3 का 4पाठ्यक्रम में 11/36~12 min
मॉड्यूल पाठ (3/4)

शब्दकोश

एक शब्दकोश (dict) एक कुंजी → मान मानचित्र है: आप एक कुंजी जोड़ते हैं (लगभग हमेशा एक स्ट्रिंग) किसी भी प्रकार के मान के साथ। यह मौलिक है वास्तविक दुनिया की संस्थाओं के मॉडलिंग के लिए डेटा संरचना।

एक शब्दकोष बनाना

Python
vuoto = {}
utente = {"nome": "Ada", "anni": 36, "attivo": True}
# costruttore alternativo
utente = dict(nome="Ada", anni=36, attivo=True)

कुंजियाँ हैशेबल (अपरिवर्तनीय) होनी चाहिए: स्ट्रिंग्स, संख्याएं, हैशेबल के टुपल्स तत्व. दूसरी ओर, मूल्य कुछ भी हो सकते हैं - यहां तक ​​कि अन्य निर्देश भी।

पहुँचें, संशोधित करें, हटाएँ

Python
utente["nome"]            # 'Ada'
utente["email"]           # KeyError!
utente.get("email")       # None       (default sicuro)
utente.get("email", "—")  # '—'        (default custom)
utente["citta"] = "Roma"  # aggiunge / aggiorna
del utente["attivo"]      # rimuove

एक आदेश पर बार-बार दोहराना

Python
for chiave in utente:               # itera sulle CHIAVI (default)
    print(chiave, utente[chiave])

for chiave in utente.keys():        # esplicito
    ...

for valore in utente.values():
    print(valore)

for chiave, valore in utente.items():    # idiom più comune
    print(f"{chiave} = {valore}")

पुनरावृत्ति क्रम सम्मिलन आदेश है (पायथन 3.7 के बाद से गारंटीकृत)। आगे)।

क्या कुंजी मौजूद है?

Python
"nome" in utente     # True
"email" in utente    # False     (NON usa il valore, usa la chiave!)

setdefault: पहली पहुंच पर प्रारंभ करें

एक बारंबार पैटर्न: "यदि कुंजी मौजूद नहीं है, तो डिफ़ॉल्ट डालें; किसी में भी केस वर्तमान मान लौटाएं"।

Python
gruppi = {}
for nome in ["Ada", "Linus", "Ada", "Grace", "Linus", "Ada"]:
    gruppi.setdefault(nome, []).append(1)
# {'Ada': [1, 1, 1], 'Linus': [1, 1], 'Grace': [1]}

गिनती के विशिष्ट मामले के लिए collections.Counter भी है (हम)। इसे stdlib मॉड्यूल में देखेंगे)।

शब्दकोशों पर बार-बार विचार करना

आप एक शब्दकोश को कई तरीकों से दोहरा सकते हैं:

  • for k in d: केवल कुंजियों पर लूप (डिफ़ॉल्ट व्यवहार)।
  • for k, v in d.items(): कुंजी-मूल्य जोड़े पर एक साथ लूप (अत्यधिक उपयोगी)।
  • for v in d.values(): केवल मानों पर लूप।

इसे अजमाएं

व्यायाम#python.m3.l3.e1
प्रयास: 0लोड हो रहा है...

`उपयोगकर्ता = {'nome': 'Ada', 'anni': 36}` को देखते हुए, कुंजी 'email' = 'ada@ex.com' जोड़ें और फिर डिफ़ॉल्ट 'sconosciuto' के साथ .get का उपयोग करके कुंजी 'telefono' का मान `email_or_default` पर निर्दिष्ट करें। `ईमेल_या_डिफ़ॉल्ट` का मूल्यांकन करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

.get('telefono', 'sconosciuto') KeyError नहीं बढ़ाता।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम की समीक्षा करें

व्यायाम#python.m3.l3.e2
प्रयास: 0लोड हो रहा है...

दिया गया `कीमतें = {'मेला': 1.2, 'पेरा': 1.5, 'कीवी': 2.0}`, सभी मूल्यों के योग की गणना करें और इसे `कुल` में निर्दिष्ट करें। 'कुल' का मूल्यांकन करें.

संपादक लोड हो रहा है...
संकेत दिखाएँ

sum(prices.values()) सभी मानों को जोड़ता है।

3 प्रयासों के बाद समाधान उपलब्ध है

अतिरिक्त चुनौती

व्यायाम#python.m3.l3.e3
प्रयास: 0लोड हो रहा है...

Given the dictionary `user = {'name': 'Alice'}`, use the `.get()` method to retrieve the value of the key `'role'`. If the key does not exist, make it return the default value `'guest'`. Store the result in `user_role` and evaluate it.

संपादक लोड हो रहा है...
संकेत दिखाएँ

प्राप्त विधि फ़ॉलबैक के रूप में दूसरे पैरामीटर को स्वीकार करती है: user.get('भूमिका', 'अतिथि')।

3 प्रयासों के बाद समाधान उपलब्ध है