سطح مقدماتی (Beginner Level)
دیکشنریها (Dictionaries) یکی از پرکاربردترین ساختمان دادهها در پایتون هستند. برای کارآمد بودن در پایتون، تنها دانستن نحوه تعریف یک دیکشنری کافی نیست؛ شما باید بر «متدها» (Methods) که ابزارهای داخلی پایتون برای ویرایش، جستجو و مدیریت دیکشنریها هستند، مسلط باشید.
در این بخش، متدهای پایه و پرکاربرد را بررسی میکنیم.
۱. دسترسی ایمن با get()
یکی از رایجترین خطاها در پایتون KeyError است که زمانی رخ میدهد که بخواهید کلیدی را بخوانید که وجود ندارد. متد get() راه حل ایمن برای این کار است.
مثال اول: جلوگیری از خطا
اگر کلید وجود نداشته باشد، این متد بجای خطا، مقدار None برمیگرداند.
مثال دوم: تعیین مقدار پیشفرض
شما میتوانید تعیین کنید در صورت نبودن کلید، چه مقداری برگردانده شود.
۲. دریافت نماها (Views): keys(), values(), items()
برای پیمایش (Looping) یا بررسی محتویات دیکشنری، از این سه متد استفاده میشود.
مثال اول: دریافت کلیدها و مقادیر
مثال دوم: پیمایش همزمان (items)
متد items() کلید و مقدار را به صورت تاپل برمیگرداند که بهترین روش برای حلقههای for است.
۳. اضافه کردن و بروزرسانی با update()
برای ترکیب دو دیکشنری یا بروزرسانی چندین مقدار به صورت همزمان، از update() استفاده میکنیم.
مثال اول: ادغام دو دیکشنری
مثال دوم: سینتکس نامگذاری شده
# این کد تنها بخشی از منطق است و برای اجرا نیاز به دیکشنری اولیه دارد (Static)
def update_config(conf):
# میتوان مقادیر را به صورت آرگومانهایменова شده پاس داد
conf.update(debug=True, version=2.0)
۴. حذف دادهها: pop(), popitem(), clear()
مدیریت حافظه و حذف دادههای اضافی بخش مهمی از برنامه نویسی است.
مثال اول: حذف با کلید مشخص (pop)
این متد مقدار حذف شده را نیز برمیگرداند.
مثال دوم: حذف آخرین آیتم (popitem)
در نسخههای جدید پایتون (3.7+)، این متد آخرین جفت کلید-مقدار وارد شده را حذف میکند.
مثال سوم: پاکسازی کامل (clear)
سطح پیشرفته (Professional Level)
در این بخش به بررسی متدهایی میپردازیم که رفتار پیچیدهتری دارند و همچنین نکات فنی مربوط به نحوه مدیریت حافظه در دیکشنریها را بررسی میکنیم.
۱. متد setdefault()
این متد اغلب با get() اشتباه گرفته میشود. تفاوت اصلی این است که setdefault اگر کلید را پیدا نکند، آن را با مقدار پیشفرض به دیکشنری اضافه میکند.
مثال اول: مقداردهی اولیه
مثال دوم: گروهبندی دادهها (الگوی حرفهای)
این الگو برای ساخت دیکشنریهایی که مقادیرشان لیست است (List of Lists) بسیار پرکاربرد است.
۲. متد fromkeys() و دام مشترک (Pitfall)
این متد برای ساخت دیکشنری جدید با کلیدهای مشخص و یک مقدار اولیه ثابت استفاده میشود. اما باید در استفاده از اشیاء تغییرپذیر (Mutable) بسیار مراقب باشید.
مثال اول: استفاده صحیح (با مقادیر Immutable)
مثال دوم: مشکل حافظه مشترک (Shared Reference)
اگر از یک لیست به عنوان مقدار پیشفرض استفاده کنید، آن لیست بین تمام کلیدها مشترک میشود!
۳. کپی کردن: copy() (Shallow Copy)
متد copy() یک کپی سطحی (Shallow Copy) از دیکشنری ایجاد میکند. این یعنی ساختار دیکشنری جدید است، اما آبجکتهای داخل آن (اگر تو در تو باشند) همچنان به همان مراجع قبلی اشاره دارند.
مثال اول: کپی سطحی
مثال دوم: بررسی هویت شیء (Snippet)
# Static code demonstrating logic
data = {"config": {"dark_mode": True}}
new_data = data.copy()
# در کپی سطحی، دیکشنری داخلی کپی نمیشود، بلکه ارجاع داده میشود
# new_data["config"] is data["config"] -> True
۴. ادغام پیشرفته در پایتون ۳.۹+ (| و |=)
علاوه بر update()، در نسخههای مدرن پایتون اپراتورهای Union برای دیکشنریها معرفی شدهاند.
مثال اول: ادغام با | (ایجاد دیکشنری جدید)
مثال دوم: ادغام درجا با |=

جمعبندی نکات فنی
- سرعت: متدهایی مانند
get،popو دسترسی مستقیمd[k]دارای پیچیدگی زمانی O(1) هستند و بسیار سریع عمل میکنند. - Thread Safety: متدهای داخلی دیکشنری در CPython اتمیک (Atomic) هستند، اما ترکیب چند عملیات (مثلاً خواندن و سپس نوشتن) نیاز به قفل (Lock) دارد.
- حافظه: استفاده مداوم از
updateروی دیکشنریهای بسیار بزرگ ممکن است باعث Re-sizing مکرر جدول هش (Hash Table) شود. در صورت امکان، دیکشنری را با ظرفیت مناسب بسازید.