title: آموزش جامع دیکشنریها در پایتون slug: python-dictionaries description: راهنمای کامل کار با دیکشنریها (Dictionary)، متدها، پیمایش و تکنیکهای پیشرفته مدیریت دادههای Key-Value. date: 1404/10/16 order: 8
سطح مقدماتی (Beginner Level)
دیکشنریها (Dictionary) در پایتون نوعی ساختار داده هستند که دادهها را به صورت جفتهای کلید: مقدار (Key: Value) ذخیره میکنند. برخلاف لیستها که با ایندکس عددی کار میکنند، در دیکشنریها برای دسترسی به مقادیر از کلیدهای منحصربهفرد استفاده میشود. دیکشنریها تغییرپذیر (Mutable) هستند اما کلیدهای آنها باید تغییرناپذیر (Immutable) باشند.
۱. ساخت دیکشنری و دسترسی به مقادیر
سادهترین راه ساخت دیکشنری استفاده از آکولاد {} است. برای دسترسی به مقادیر، نام کلید را داخل براکت [] قرار میدهیم.
مثال ۱: ساخت یک دیکشنری ساده در این مثال یک دیکشنری مشخصات کاربر میسازیم و مقادیر آن را چاپ میکنیم.
مثال ۲: استفاده از متد dict()
همچنین میتوانیم از تابع سازنده dict استفاده کنیم. این روش گاهی خوانایی را برای کلیدهای رشتهای ساده افزایش میدهد.
۲. افزودن، ویرایش و حذف دادهها
دیکشنریها پویا هستند؛ یعنی میتوانید هر زمان که بخواهید کلید جدیدی اضافه کنید یا مقدار کلیدی را تغییر دهید.
مثال ۱: ویرایش و افزودن اگر کلید وجود داشته باشد، مقدار آن آپدیت میشود. اگر وجود نداشته باشد، یک جفت جدید ساخته میشود.
مثال ۲: حذف آیتمها
برای حذف میتوان از کلمه کلیدی del یا متد .pop() استفاده کرد. متد pop مقدار حذف شده را برمیگرداند.
۳. متدهای پرکاربرد (keys, values, items)
برای پیمایش یا دریافت لیست دادهها، متدهای زیر بسیار حیاتی هستند:
.keys(): لیست کلیدها..values(): لیست مقادیر..items(): لیست تاپلهایی شامل (کلید, مقدار).
مثال ۱: دریافت لیستها
مثال ۲: پیمایش با حلقه For بهترین روش برای دسترسی همزمان به کلید و مقدار در حلقه.
۴. جلوگیری از خطای Key Error با متد .get()
اگر سعی کنید به کلیدی که وجود ندارد دسترسی پیدا کنید، پایتون خطای KeyError میدهد. متد .get() راهی امن برای این کار است.
مثال ۱: مقایسه دسترسی مستقیم و get
این کد نشان میدهد که چگونه get به جای خطا، مقدار None یا یک مقدار پیشفرض را برمیگرداند.
سطح پیشرفته (Professional Level)
در سطح حرفهای، دیکشنریها ابزاری قدرتمند برای بهینهسازی عملکرد (به دلیل جستجوی O(1)) و مدیریت دادههای پیچیده هستند. در اینجا با تکنیکهای مدرن و ماژول collections آشنا میشویم.
۱. Dictionary Comprehension
همانند لیستها، میتوانید دیکشنریها را نیز با سینتکس فشرده و تکخطی ایجاد کنید. این روش سریعتر و پایتونیکتر است.
مثال ۱: ایجاد دیکشنری توان دوم ساخت دیکشنری که کلید آن اعداد ۱ تا ۵ و مقدار آن توان دوم آنهاست.
مثال ۲: فیلتر کردن دیکشنری حذف آیتمهایی که مقدار آنها کمتر از ۱۰ است.
۲. ادغام دیکشنریها (Merging)
در نسخههای قدیمیتر از update() استفاده میشد، اما در پایتون ۳.۹ به بعد از عملگر پایپ | استفاده میشود.
مثال ۱: ادغام با عملگر | (Python 3.9+)
این روش یک دیکشنری جدید میسازد و دیکشنریهای اصلی را تغییر نمیدهد.
مثال ۲: استفاده از update (روش کلاسیک)
این روش دیکشنری اولیه را تغییر میدهد (In-place).
# Static Snippet: Modifying existing dict
def merge_configs(base, override):
base.update(override)
return base
۳. مقادیر پیشفرض با defaultdict
کلاس defaultdict از ماژول collections نیاز به چک کردن وجود کلید را از بین میبرد. اگر کلیدی وجود نداشته باشد، به طور خودکار با یک نوع داده خاص ساخته میشود.
مثال ۱: گروهبندی دادهها فرض کنید لیستی از تاپلها دارید و میخواهید آنها را دستهبندی کنید.
مثال ۲: شمارش با int به عنوان پیشفرض
شمارش تکرار کاراکترها در یک رشته بدون نیاز به شرط if key in dict.
۴. شمارشگر خودکار با Counter
برای شمارش اشیاء هشپذیر (Hashable)، کلاس Counter بسیار کارآمدتر از دیکشنری معمولی است.
مثال ۱: یافتن پرتکرارترین آیتمها
متد most_common بسیار کاربردی است.
۵. نکات پرفورمنس و کلیدهای مجاز
دیکشنریها در پایتون بر اساس Hash Table پیادهسازی شدهاند. این یعنی جستجو، درج و حذف در حالت متوسط دارای پیچیدگی زمانی O(1) است.
- کلیدها: فقط اشیاء تغییرناپذیر (Immutable) مثل رشته، عدد و تاپل میتوانند کلید باشند.
- لیست به عنوان کلید: غیرمجاز است چون لیست تغییرپذیر است و Hash ندارد.
مثال ۱: استفاده از تاپل به عنوان کلید این تکنیک برای ذخیره مختصات یا کلیدهای ترکیبی عالی است.
مثال ۲: خطای استفاده از لیست (Static) این کد اجرا نمیشود و صرفاً جهت نمایش خطای رایج است.
# این کد خطا میدهد چون لیست unhashable است
def invalid_key():
my_dict = {}
my_list = [1, 2]
# TypeError: unhashable type: 'list'
my_dict[my_list] = "Error"