تعریف دیکشنری در پایتون
در واقع، در این درس تعریف دیکشنری در پایتون را از پایه و با مثال یاد میگیرید.
بنابراین تا اینجا هر وقت خواستید به یک داده دسترسی داشته باشید، مجبور بودید شمارهاش را بدانید. در لیست، علی یعنی students[0].
همچنین، این در دنیای واقعی عجیب است. شما در دفترچهی تلفنتان دنبال «شمارهی ۴۷» نمیگردید؛ دنبال «علی» میگردید. دیکشنری دقیقاً همین کار را ممکن میکند.
ساختار دیکشنری
به این ترتیب، دیکشنری مجموعهای از جفتهای کلید و مقدار است. با آکولاد تعریف میشود و هر جفت را با دونقطه از هم جدا میکنیم.
person = {
"name": "علی",
"age": 25,
"city": "تهران"
}
print(person["name"])
علی
کلید مقدار
┌─────────┐ ┌─────────┐
│ name │ ──► │ علی │
├─────────┤ ├─────────┤
│ age │ ──► │ 25 │
├─────────┤ ├─────────┤
│ city │ ──► │ تهران │
└─────────┘ └─────────┘
افزودن و تغییر
person["job"] = "برنامهنویس" # کلید جدید
person["age"] = 26 # تغییر مقدار موجود
print(person)
علاوه بر این، دقت کنید که هر دو کار با یک سینتکس انجام میشود. اگر کلید نباشد ساخته میشود و اگر باشد مقدارش عوض میشود. همین موضوع گاهی باعث میشود ناخواسته دادهای را روی دادهی قبلی بنویسید.
خواندن امن با get
اگر کلیدی را بخواهید که وجود ندارد، برنامه متوقف میشود:
print(person["email"])
KeyError: 'email'
در کد واقعی، دادهای که از کاربر یا از یک سرویس میگیرید همیشه کامل نیست. راهحل پایتون متد get است:
print(person.get("email"))
print(person.get("email", "ثبت نشده"))
None
ثبت نشده
متد get به جای خطا دادن، مقدار پیشفرض برمیگرداند. این یکی از همان جزئیاتی است که کد تازهکار را از کد حرفهای جدا میکند.
حذف کلید
del person["city"]
removed = person.pop("job")
print(removed)
چه چیزی میتواند کلید باشد
کلید باید تغییرناپذیر باشد. رشته، عدد و تاپل میتوانند کلید باشند، ولی لیست نمیتواند. در درس قبل دیدید که دلیلش چیست.
مقدار اما هر چیزی میتواند باشد؛ حتی لیست یا دیکشنری دیگر:
student = {
"name": "زهرا",
"scores": [18, 20, 15],
"address": {"city": "شیراز", "zip": "71"}
}
print(student["scores"][1])
print(student["address"]["city"])
20
شیراز
این ساختار دقیقاً همان چیزی است که وقتی از یک سرویس داده میگیرید تحویل میگیرید. پس راحت بودن با دیکشنری، مقدمهی کار با دادهی واقعی است.
اشتباهات رایج
کلید تکراری
data = {"a": 1, "a": 2}
print(data)
{'a': 2}
خطایی در کار نیست؛ فقط مقدار دوم روی اولی مینشیند. کلیدها در دیکشنری یکتا هستند.
انتظار ترتیب الفبایی
دیکشنری از پایتون ۳٫۷ به بعد، ترتیب درج را حفظ میکند، نه ترتیب الفبایی. یعنی هر کلیدی را زودتر اضافه کرده باشید، زودتر میآید.
جمعبندی
دیکشنری داده را با نام نگه میدارد نه با شماره، و همین باعث میشود کد خواناتر و نزدیکتر به دنیای واقعی باشد. برای خواندن امن، عادت کنید به get.
در درس بعدی یاد میگیرید روی دیکشنری حرکت کنید.
برای مطالعهی بیشتر میتوانید به مستندات رسمی پایتون سر بزنید.
این درس بخشی از دوره آموزش پایتون مقدماتی است.