دیکشنری در پایتون چیست؟ آموزش Dictionary با مثال کاربردی
آموزش دیکشنری پایتون
جلسه ۲۰ آموزش پایتون: دیکشنری (Dictionary)؛ ذخیره اطلاعات با کلید و مقدار
دیکشنری در پایتون یکی از مهمترین ساختارهای داده برای ذخیره و مدیریت اطلاعات بهصورت کلید و مقدار است. در این جلسه یاد میگیریم چگونه دیکشنری بسازیم، به مقادیر آن دسترسی پیدا کنیم و اطلاعات جدید اضافه یا ویرایش کنیم. همچنین با متدهای کاربردی دیکشنری، پیمایش دادهها و تفاوت آن با لیست و تاپل آشنا میشویم. در پایان، با چند مثال عملی میتوانیم از دیکشنری برای ساختاردهی بهتر دادهها در پروژههای پایتونی استفاده کنیم.
در جلسه قبل چه گذشت ؟
در جلسه قبل با [مجموعهها در پایتون (Set)] آشنا شدیم؛ ساختاری که برای نگهداری دادههای یکتا کاربرد دارد. حالا نوبت یکی از پرکاربردترین ساختارهای داده در پایتون است: دیکشنری (Dictionary). آموزش Set در پایتون؛ آشنایی با مجموعهها و دادههای یکتا
دیکشنری به ما کمک میکند اطلاعات را بهصورت جفتهای «کلید و مقدار» ذخیره کنیم؛ مثلاً نام، سن و شهر یک کاربر را با کلیدهای مشخص نگه داریم و هر زمان لازم شد، بهسادگی به آنها دسترسی پیدا کنیم.
دیکشنری در پایتون چیست؟
دیکشنری (Dictionary) یک ساختار داده است که اطلاعات را به شکل کلید: مقدار نگهداری میکند.
هر آیتم در دیکشنری از دو بخش تشکیل شده است:
-
کلید (Key): شناسهای که برای پیدا کردن اطلاعات استفاده میشود.
-
مقدار (Value): دادهای که به آن کلید اختصاص داده شده است.
برای مثال، اگر بخواهیم مشخصات یک کاربر را ذخیره کنیم، میتوانیم از دیکشنری استفاده کنیم:
user = { "name": "Ali", "age": 25, "city": "Tehran"}
در این مثال، name، age و city کلیدهای دیکشنری هستند و مقادیر آنها بهترتیب "Ali"، 25 و "Tehran" است.
دیکشنریها با آکولاد {} ساخته میشوند و هر کلید و مقدار با علامت : از هم جدا میشوند.
ساخت دیکشنری در پایتون
برای ساخت یک دیکشنری، کافی است کلیدها و مقادیر موردنظر را داخل آکولاد قرار دهیم:
product = { "title": "Laptop", "price": 45000000, "available": True}
در اینجا یک دیکشنری با سه مشخصه برای محصول ساختهایم.
اگر بخواهیم دیکشنری خالی ایجاد کنیم، میتوانیم بنویسیم:
data = {}
یا از تابع dict() استفاده کنیم:
data = dict()
هر دو روش یک دیکشنری خالی ایجاد میکنند.
دسترسی به مقادیر دیکشنری
برای دریافت مقدار یک کلید، میتوانیم نام کلید را داخل کروشه قرار دهیم:
user = { "name": "Sara", "age": 22}print(user["name"])print(user["age"])
خروجی:
Sara
22
اما اگر کلیدی در دیکشنری وجود نداشته باشد، استفاده از کروشه باعث ایجاد خطای KeyError میشود.
برای دسترسی امنتر، میتوانیم از متد get() استفاده کنیم:
print(user.get("name"))print(user.get("email"))
خروجی:
Sara
None
اگر کلید پیدا نشود، get() بهصورت پیشفرض None برمیگرداند. همچنین میتوانیم مقدار پیشفرض دلخواه مشخص کنیم:
print(user.get("email", "ایمیل ثبت نشده است"))
خروجی:
ایمیل ثبت نشده است
اضافه کردن اطلاعات به دیکشنری
برای اضافه کردن یک کلید و مقدار جدید، کافی است کلید موردنظر را بنویسیم و مقداری به آن اختصاص دهیم:
user = { "name": "Sara", "age": 22}user["city"] = "Shiraz"print(user)
خروجی:
{'name': 'Sara', 'age': 22, 'city': 'Shiraz'}
اگر کلید جدید باشد، آیتم تازهای به دیکشنری اضافه میشود.
ویرایش مقدارهای دیکشنری
اگر کلیدی از قبل وجود داشته باشد، با اختصاص مقدار جدید، مقدار قبلی آن تغییر میکند:
user = { "name": "Sara", "age": 22}user["age"] = 23print(user)
خروجی:
{'name': 'Sara', 'age': 23}
بنابراین یک دستور میتواند هم برای اضافه کردن آیتم جدید و هم برای تغییر مقدار آیتم موجود استفاده شود.
حذف اطلاعات از دیکشنری
پایتون روشهای مختلفی برای حذف آیتمهای دیکشنری دارد.
استفاده از pop()
متد pop() یک کلید را حذف میکند و مقدار آن را برمیگرداند:
user = { "name": "Ali", "age": 25, "city": "Tehran"}age = user.pop("age")print(age)print(user)
خروجی:
25
{'name': 'Ali', 'city': 'Tehran'}
اگر کلید وجود نداشته باشد، pop() خطا میدهد؛ مگر اینکه مقدار پیشفرض مشخص کنیم:
user.pop("email", None)
استفاده از del
با دستور del میتوانیم یک آیتم را حذف کنیم:
del user["city"]
استفاده از clear()
اگر بخواهیم تمام آیتمهای دیکشنری را حذف کنیم، از clear() استفاده میکنیم:
user.clear()print(user)
خروجی:
{}
این متد دیکشنری را خالی میکند، اما خود متغیر همچنان وجود دارد.
متدهای کاربردی دیکشنری در پایتون
دیکشنری متدهای متنوعی دارد که کار با اطلاعات را سادهتر میکنند. در ادامه، مهمترین آنها را بررسی میکنیم.
متد keys()
متد keys() تمام کلیدهای دیکشنری را برمیگرداند:
user = { "name": "Ali", "age": 25, "city": "Tehran"}print(user.keys())
خروجی:
dict_keys(['name', 'age', 'city'])
متد values()
اگر فقط به مقادیر دیکشنری نیاز داشته باشیم، میتوانیم از values() استفاده کنیم:
print(user.values())
خروجی:
dict_values(['Ali', 25, 'Tehran'])
متد items()
متد items() کلیدها و مقادیر را بهصورت جفتهای دوتایی برمیگرداند:
print(user.items())
خروجی:
dict_items([('name', 'Ali'), ('age', 25), ('city', 'Tehran')])
این متد بهویژه هنگام پیمایش دیکشنری کاربرد زیادی دارد.
متد update()
با update() میتوانیم چند مقدار را همزمان اضافه یا ویرایش کنیم:
user.update({ "age": 26, "country": "Iran"})print(user)
خروجی:
{'name': 'Ali', 'age': 26, 'city': 'Tehran', 'country': 'Iran'}
در این مثال، مقدار age تغییر کرده و کلید country نیز به دیکشنری اضافه شده است.
متد setdefault()
متد setdefault() مقدار یک کلید را برمیگرداند. اگر کلید وجود نداشته باشد، آن را با مقدار پیشفرض وارد دیکشنری میکند:
user = { "name": "Ali"}user.setdefault("age", 25)print(user)
خروجی:
{'name': 'Ali', 'age': 25}
اگر کلید age از قبل وجود داشته باشد، مقدار آن تغییر نمیکند.
پیمایش دیکشنری با حلقه for
یکی از کارهای رایج، پیمایش کلیدها یا مقادیر دیکشنری است.
پیمایش کلیدها
اگر دیکشنری را مستقیماً در حلقه for قرار دهیم، کلیدها پیمایش میشوند:
user = { "name": "Ali", "age": 25, "city": "Tehran"}for key in user: print(key)
خروجی:
name
age
city
پیمایش مقادیر
برای پیمایش مقدارها میتوانیم از values() استفاده کنیم:
for value in user.values(): print(value)
خروجی:
Ali
25
Tehran
پیمایش کلید و مقدار بهصورت همزمان
روش کاربردیتر، استفاده از items() است:
for key, value in user.items(): print(key, ":", value)
خروجی:
name : Ali
age : 25
city : Tehran
در این مثال، متغیر key کلید هر آیتم و متغیر value مقدار همان آیتم را دریافت میکند.
بررسی وجود یک کلید در دیکشنری
برای بررسی اینکه کلیدی در دیکشنری وجود دارد یا نه، میتوانیم از عملگر in استفاده کنیم:
user = { "name": "Ali", "age": 25}if "name" in user: print("کلید name وجود دارد")
خروجی:
کلید name وجود دارد
نکته مهم این است که عملگر in در دیکشنری، وجود کلید را بررسی میکند، نه مقدار را.
برای مثال:
print("Ali" in user)
خروجی:
False
چون "Ali" مقدار یکی از آیتمهاست و کلید دیکشنری نیست.
دیکشنری تو در تو (Nested Dictionary)
گاهی لازم است اطلاعات پیچیدهتری ذخیره کنیم. در این حالت میتوانیم یک دیکشنری را داخل دیکشنری دیگر قرار دهیم.
users = { "user1": { "name": "Ali", "age": 25 }, "user2": { "name": "Sara", "age": 22 }}
در این مثال، دیکشنری users شامل دو دیکشنری دیگر است.
برای دسترسی به نام کاربر اول مینویسیم:
print(users["user1"]["name"])
خروجی:
Ali
دیکشنریهای تو در تو برای نگهداری اطلاعات کاربران، محصولات، تنظیمات و دادههای ساختاریافته کاربرد دارند.
تفاوت دیکشنری با لیست و تاپل
در پایتون، هر سه ساختار دیکشنری، لیست و تاپل برای نگهداری دادهها استفاده میشوند؛ اما کاربرد و ویژگیهای آنها متفاوت است.
| ویژگی | List | Tuple | Dictionary |
|---|---|---|---|
| نماد ساخت | [] |
() |
{} |
| نحوه دسترسی | با اندیس | با اندیس | با کلید |
| تغییرپذیری | تغییرپذیر | تغییرناپذیر | تغییرپذیر |
| نگهداری داده | مجموعهای از آیتمها | مجموعهای از آیتمها | جفتهای کلید و مقدار |
| کاربرد اصلی | فهرست دادهها | دادههای ثابت | اطلاعات دارای شناسه |
برای مثال، اگر فقط بخواهیم فهرستی از نامها داشته باشیم، لیست گزینه مناسبی است:
names = ["Ali", "Sara", "Reza"]
اما اگر بخواهیم مشخصات هر فرد را با عنوانهای مشخص ذخیره کنیم، دیکشنری انتخاب بهتری خواهد بود:
user = { "name": "Ali", "age": 25}
نکات مهم درباره دیکشنری در پایتون
هنگام استفاده از دیکشنری بهتر است چند نکته را به خاطر داشته باشیم:
-
کلیدهای دیکشنری باید یکتا باشند.
-
اگر یک کلید تکراری تعریف شود، مقدار آخر برای آن کلید باقی میماند.
-
کلیدها باید از نوع داده تغییرناپذیر و قابل هش باشند؛ مانند
str،intوtupleای که اعضای آن قابل هش هستند. -
مقدارهای دیکشنری میتوانند از انواع مختلف داده باشند؛ مانند رشته، عدد، لیست یا حتی دیکشنری دیگر.
-
دیکشنریهای پایتون در نسخههای جدید ترتیب درج آیتمها را حفظ میکنند.
-
برای دسترسی به مقدار یک کلید، معمولاً از
[]یاget()استفاده میشود.
مثال کلید تکراری:
data = { "name": "Ali", "name": "Sara"}print(data)
خروجی:
{'name': 'Sara'}
در این مثال، مقدار نهایی کلید name برابر با "Sara" است.
یک مثال کاربردی از دیکشنری در پایتون
فرض کنیم میخواهیم اطلاعات یک محصول را ذخیره کنیم و قیمت آن را تغییر دهیم:
product = { "name": "Keyboard", "price": 1200000, "stock": 15}print("نام محصول:", product["name"])print("قیمت:", product["price"])product["price"] = 1350000product["stock"] = 12print("اطلاعات بهروز شده:", product)
خروجی:
نام محصول: Keyboard
قیمت: 1200000
اطلاعات بهروز شده: {'name': 'Keyboard', 'price': 1350000, 'stock': 12}
این مثال نشان میدهد که دیکشنری چگونه میتواند اطلاعات یک محصول را به شکلی منظم نگهداری و مدیریت کند.
جمعبندی
دیکشنری یکی از ساختارهای داده مهم و پرکاربرد در پایتون است که اطلاعات را با استفاده از کلید و مقدار ذخیره میکند. این ساختار برای زمانی مناسب است که بخواهیم بهجای استفاده از شماره اندیس، با یک شناسه مشخص به دادهها دسترسی داشته باشیم.
در این جلسه یاد گرفتیم:
-
چگونه دیکشنری بسازیم.
-
چگونه به مقادیر دسترسی پیدا کنیم.
-
چطور اطلاعات را اضافه، ویرایش یا حذف کنیم.
-
چگونه از متدهایی مانند
get()،items()،keys()،values()وupdate()استفاده کنیم. -
چطور با حلقه
forدیکشنری را پیمایش کنیم. -
چگونه دیکشنریهای تو در تو بسازیم.
در جلسه بعدی، به سراغ یکی از قابلیتهای مهم پایتون میرویم: توابع (Functions)؛ ابزاری که کمک میکند کدهای خود را مرتبتر، قابل استفاده مجدد و سادهتر بنویسیم.
سوالات متداول درباره دیکشنری در پایتون
دیکشنری در پایتون چیست؟
دیکشنری ساختاری برای ذخیره دادهها بهصورت جفتهای کلید و مقدار است. هر کلید به یک مقدار مشخص اشاره میکند.
چگونه یک دیکشنری خالی بسازیم؟
با استفاده از آکولاد خالی یا تابع dict():
data = {}
یا:
data = dict()
تفاوت get() با استفاده از کروشه چیست؟
با user["name"]، اگر کلید وجود نداشته باشد، خطای KeyError رخ میدهد. اما user.get("name") در صورت نبودن کلید، بهصورت پیشفرض None برمیگرداند.
آیا کلیدهای دیکشنری میتوانند تکراری باشند؟
خیر. کلیدها در دیکشنری یکتا هستند. اگر یک کلید چند بار تعریف شود، مقدار آخر آن باقی میماند.
آیا دیکشنری در پایتون تغییرپذیر است؟
بله. میتوان پس از ساخت دیکشنری، آیتمهای آن را اضافه، حذف یا ویرایش کرد.
چگونه کلیدهای یک دیکشنری را دریافت کنیم؟
با متد keys():
print(user.keys())
چگونه یک آیتم را از دیکشنری حذف کنیم؟
میتوان از pop() یا del استفاده کرد:
user.pop("age")
یا:
del user["age"]
انکر تکست لینک داخلی به جلسه قبل:
انکر تکست لینک داخلی به جلسه بعد:
آموزش توابع در پایتون؛ ساخت و استفاده از Function
