Untitled

🐍 HomeOfPython
|
📅 2025

title: آموزش جامع دیکشنری‌ها در پایتون slug: python-dictionaries description: راهنمای کامل کار با دیکشنری‌ها (Dictionary)، متدها، پیمایش و تکنیک‌های پیشرفته مدیریت داده‌های Key-Value. date: 1404/10/16 order: 8

سطح مقدماتی (Beginner Level)

دیکشنری‌ها (Dictionary) در پایتون نوعی ساختار داده هستند که داده‌ها را به صورت جفت‌های کلید: مقدار (Key: Value) ذخیره می‌کنند. برخلاف لیست‌ها که با ایندکس عددی کار می‌کنند، در دیکشنری‌ها برای دسترسی به مقادیر از کلیدهای منحصر‌به‌فرد استفاده می‌شود. دیکشنری‌ها تغییرپذیر (Mutable) هستند اما کلیدهای آن‌ها باید تغییرناپذیر (Immutable) باشند.

۱. ساخت دیکشنری و دسترسی به مقادیر

ساده‌ترین راه ساخت دیکشنری استفاده از آکولاد {} است. برای دسترسی به مقادیر، نام کلید را داخل براکت [] قرار می‌دهیم.

مثال ۱: ساخت یک دیکشنری ساده در این مثال یک دیکشنری مشخصات کاربر می‌سازیم و مقادیر آن را چاپ می‌کنیم.

Python

مثال ۲: استفاده از متد dict() همچنین می‌توانیم از تابع سازنده dict استفاده کنیم. این روش گاهی خوانایی را برای کلیدهای رشته‌ای ساده افزایش می‌دهد.

Python

۲. افزودن، ویرایش و حذف داده‌ها

دیکشنری‌ها پویا هستند؛ یعنی می‌توانید هر زمان که بخواهید کلید جدیدی اضافه کنید یا مقدار کلیدی را تغییر دهید.

مثال ۱: ویرایش و افزودن اگر کلید وجود داشته باشد، مقدار آن آپدیت می‌شود. اگر وجود نداشته باشد، یک جفت جدید ساخته می‌شود.

Python

مثال ۲: حذف آیتم‌ها برای حذف می‌توان از کلمه کلیدی del یا متد .pop() استفاده کرد. متد pop مقدار حذف شده را برمی‌گرداند.

Python

۳. متدهای پرکاربرد (keys, values, items)

برای پیمایش یا دریافت لیست داده‌ها، متدهای زیر بسیار حیاتی هستند:

  • .keys(): لیست کلیدها.
  • .values(): لیست مقادیر.
  • .items(): لیست تاپل‌هایی شامل (کلید, مقدار).

مثال ۱: دریافت لیست‌ها

Python

مثال ۲: پیمایش با حلقه For بهترین روش برای دسترسی همزمان به کلید و مقدار در حلقه.

Python

۴. جلوگیری از خطای Key Error با متد .get()

اگر سعی کنید به کلیدی که وجود ندارد دسترسی پیدا کنید، پایتون خطای KeyError می‌دهد. متد .get() راهی امن برای این کار است.

مثال ۱: مقایسه دسترسی مستقیم و get این کد نشان می‌دهد که چگونه get به جای خطا، مقدار None یا یک مقدار پیش‌فرض را برمی‌گرداند.

Python

سطح پیشرفته (Professional Level)

در سطح حرفه‌ای، دیکشنری‌ها ابزاری قدرتمند برای بهینه‌سازی عملکرد (به دلیل جستجوی O(1)) و مدیریت داده‌های پیچیده هستند. در اینجا با تکنیک‌های مدرن و ماژول collections آشنا می‌شویم.

۱. Dictionary Comprehension

همانند لیست‌ها، می‌توانید دیکشنری‌ها را نیز با سینتکس فشرده و تک‌خطی ایجاد کنید. این روش سریع‌تر و پایتونیک‌تر است.

مثال ۱: ایجاد دیکشنری توان دوم ساخت دیکشنری که کلید آن اعداد ۱ تا ۵ و مقدار آن توان دوم آن‌هاست.

Python

مثال ۲: فیلتر کردن دیکشنری حذف آیتم‌هایی که مقدار آن‌ها کمتر از ۱۰ است.

Python

۲. ادغام دیکشنری‌ها (Merging)

در نسخه‌های قدیمی‌تر از update() استفاده می‌شد، اما در پایتون ۳.۹ به بعد از عملگر پایپ | استفاده می‌شود.

مثال ۱: ادغام با عملگر | (Python 3.9+) این روش یک دیکشنری جدید می‌سازد و دیکشنری‌های اصلی را تغییر نمی‌دهد.

Python

مثال ۲: استفاده از update (روش کلاسیک) این روش دیکشنری اولیه را تغییر می‌دهد (In-place).

python
# Static Snippet: Modifying existing dict
def merge_configs(base, override):
    base.update(override)
    return base

۳. مقادیر پیش‌فرض با defaultdict

کلاس defaultdict از ماژول collections نیاز به چک کردن وجود کلید را از بین می‌برد. اگر کلیدی وجود نداشته باشد، به طور خودکار با یک نوع داده خاص ساخته می‌شود.

مثال ۱: گروه‌بندی داده‌ها فرض کنید لیستی از تاپل‌ها دارید و می‌خواهید آن‌ها را دسته‌بندی کنید.

Python

مثال ۲: شمارش با int به عنوان پیش‌فرض شمارش تکرار کاراکترها در یک رشته بدون نیاز به شرط if key in dict.

Python

۴. شمارشگر خودکار با Counter

برای شمارش اشیاء هش‌پذیر (Hashable)، کلاس Counter بسیار کارآمدتر از دیکشنری معمولی است.

مثال ۱: یافتن پرتکرارترین آیتم‌ها متد most_common بسیار کاربردی است.

Python

۵. نکات پرفورمنس و کلیدهای مجاز

دیکشنری‌ها در پایتون بر اساس Hash Table پیاده‌سازی شده‌اند. این یعنی جستجو، درج و حذف در حالت متوسط دارای پیچیدگی زمانی O(1) است.

  • کلیدها: فقط اشیاء تغییرناپذیر (Immutable) مثل رشته، عدد و تاپل می‌توانند کلید باشند.
  • لیست به عنوان کلید: غیرمجاز است چون لیست تغییرپذیر است و Hash ندارد.

مثال ۱: استفاده از تاپل به عنوان کلید این تکنیک برای ذخیره مختصات یا کلیدهای ترکیبی عالی است.

Python

مثال ۲: خطای استفاده از لیست (Static) این کد اجرا نمی‌شود و صرفاً جهت نمایش خطای رایج است.

python
# این کد خطا می‌دهد چون لیست unhashable است
def invalid_key():
    my_dict = {}
    my_list = [1, 2]
    # TypeError: unhashable type: 'list'
    my_dict[my_list] = "Error"