دیکشنری در پایتون

دیکشنری یا Dictionary در زبان برنامه نویسی پایتون یک نوع داده ای محبوب و نسبتا پر کاربرد هست. این نوع داده ای در اصل یک نوع لیست انجمنی (Associative) یا لیست کلید-مقدار (key-value) می باشد.

در اصل از دیکشنری در جاهایی استفاده میشود که نیاز داریم مقادیری را با استفاده از یک کلید مرتبط با هر کدام از آنها شناسایی کنیم. این مقادیر هر چیزی میتوانند باشند، رشته متنی، عدد، شئ و … که در ادامه در مورد نوع کلیدها و مقادیر بیشتر صحبت خواهیم کرد.

 

 

دیکشنری در زبان فارسی معادل فرهنگ لغت یا واژه نامه است. در یک کتاب فرهنگ لغت، معادل یک کلمه آورده میشود. این معادل میتواند یکی یا چندین مورد باشد، اما کلمه اصلی یکی است! در اصل یک یا چند معنی معادل را به یک کلمه مرتبط کرده ایم.

در دیکشنری پایتون هم دقیقا مشابه چنین کاری را انجام میدهیم؛ یک کلمه (که آن را به عنوان کلید می شناسیم) با یک شئ (رشته متنی، عدد، رفرنس شئ و …) مرتبط خواهد شد.

معمولاً اعضای یک دیکشنری مواردی مرتبط با هم هستند و هر یک از اعضا یک خصیصه یا ویژگی از مورد اصلی را بیان میکنند. اما این مسئله تماماً وابسته به تعاریف و نوع برنامه نویسی شما به عنوان برنامه نویس است و هیچ قاعده و قانون خاصی درمورد مرتبط بودن اعضای یک دیکشنری نداریم!

 

تعریف دیکشنری در پایتون

یک دیکشنری با علامت های { و } شروع و خاتمه می یابد و اعضای آن به صورت کلید و مقدار (key value)  در درون آن تعریف شده و مشابه سایر ساختارهای ذخیره سازی در پایتون، با استفاده از کاما (,) از یکدیگر جدا میشود.

برای مثال فرض کنید میخواهیم مشخصات فردی را درون یک دیکشنری داشته باشیم؛ دیکشنری را به صورت زیر تعریف میکنیم.

 

به همین سادگی توانستیم یک دیکشنری حاوی اطلاعات فردی به نام hesam را ایجاد کنیم!

برای ایجاد دیکشنری میتوان از سازنده (Constructor) آن نیز استفاده کرد. به این منظور تابع dict() را صدا زده و تمام کلیدها و مقادیر آن ها را به صورت پارامترهای جداگانه به عنوان ورودی به تابع میدهیم.

 

تفاوت خاصی در دیکشنری ایجاد شده در دو حالت فوق وجود ندارد و میتوانید با هر روشی که راحت تر هستید یا بسته به موقعیت بهتر هست کار کنید!

 

دسترسی به مقادیر دیکشنری

حال که دیکشنری خود را تعریف کرده ایم، میتوانیم به اطلاعات و عناصر ذخیره شده در آن دسترسی داشته باشیم. به این منظور میتوانیم مشابه دسترسی به خانه های یک لیست در پایتون (python list) با استفاده از [] به تک تک عناصر دسترسی داشته باشیم؛ با این تفاوت که به جای مقدار عددی برای ایندکس، از مقادیر کلید ها به عنوان ایندکس استفاده خواهیم کرد.

 

در صورتی که مقداری از دیکشنری درخواست شود که آن کلید موجود نباشد با خطایی مربوط به عدم وجود کلید صدا زده شده مواجه میشویم.

 

حالت دیگری برای دسترسی به مقدار یک کلید در دیکشنری استفاده از تابع get() نوع داده دیکشنری است. این تابع یک ورودی میگیرد که همان کلید مورد نظر ماست و سپس مقدار مرتبط با کلید را بازمیگرداند.

 

تغییر مقادیر دیکشنری

برای به روز رسانی مقدار هر یک از کلیدها مشابه تخصیص مقدار به ایندکس های مختلف یک لیست عمل میکنیم.

 

واضح است که میتوانیم برای به روز رسانی مقدار یک کلید در دیکشنری از همان مقدار یا مقدارهای دیگر درون آن دیکشنری استفاده کنیم.

 

افزودن عنصر جدید به دیکشنری پایتون

گاهی اوقات نیاز هست یک کلید جدید حاوی مقدار دلخواهمان را به دیکشنری اضافه کنیم. برای این کار، مشابه تغییر مقدار یک کلید در دیگشنری عمل میکنیم، با این تفاوت که کلید صدا زده شده، کلید جدید و مقداری که به آن تخصیص می یابد مقدار مورد نظرمان خواهد بود.

 

حذف عناصر از دیکشنری

برای حذف یک کلید همراه با مقدار آن با هم، میتوان از دستور del استفاده کرد و در جلوی آن دیکشنری با کلید مورد نظر را صدا زد.

 

در صورتی که فقط نام دیکشنری را در مقابل دستور del بنویسیم، کل دیکشنری (شئ اصلی آن) را حذف خواهیم کرد.

 

تابع دیگری برای حذف یک المان از دیکشنری بر روی شئ دیکشنری تعریف شده به نام pop() که میتوان از آن نیز استفاده کرد. این تابع یک ورودی میگیرد که در اصل همان مقدار کلید مورد نظر ماست و سپس آن کلید (و مقدارش) را از دیکشنری حذف میکند.

 

حذف تمام عناصر دیکشنری

اگر نیاز به حذف تمام کلیدهای موجود در دیکشنری داشتیم، میتوان از تابع clear() که در شئ دیکشنری موجود هست استفاده کرد. با صدا زدن این تابع، تمام کلیدهای موجود در دیکشنری حذف شده و در نهایت یک دیکشنری خالی خواهیم داشت.

 

قوانین تعریف کلید و مقدار در دیکشنری پایتون

کلیدها در پایتون باید دو ویژگی داشته باشند.

1- تکراری نباشند.

در اصل به ازای هر کلید نمیتوان بیشتر از یک مقدار در نظر گرفت. البته این مقدار میتواند هر چیزی از جمله لیست یا رفرنس یک شئ دلخواه باشد. در صورتی که یک کلید دو بار در دیکشنری تعریف شود، در هنگام اجرا شدن برنامه، هیچ خطایی نخواهیم داشت اما در هنگام صدا زدن کلید، آخرین مقدار تعریف شده برای کلید به عنوان خروجی به ما داده میشود.

2- تغییر ناپذیر باشند.

کلید را میتوان نوعی هویت برای مقدار مرتبط با آن دانست. واضح است که هویت را نمیتوان تغییر داد. بنابراین کلیدها در دیکشنری پایتون می بایست بدون تغییر و در حقیقت تغییر ناپذیر باشند.

 

برای مقادیر متناظر با کلید ها در دیکشنری هیچ گونه محدودیتی نداریم و این مقدار میتوانند تکراری بوده یا از هر نوع داده ای خاصی (رشته، عدد، شئ پایتون، شئ تعریف شده توسط کاربر و …) باشد؛ در نتیجه میتوانند تغییر پذیر نیز باشند.

 

کپی کردن دیکشنری

همانطور که میدانید، متغیرهایی که به اشیاء اشاره میکنند حاوی رفرنس به آن شئ هستند. پس اگر یک دیکشنری را با استفاده از علامت تخصیص (=) به متغیر دیگری بدهیم، دیکشنری کپی نمیشود بلکه فقط رفرنس آن درون متغیر دوم ریخته میشود. در نتیجه به تغییر دیکشنری اولیه، دیکشنری دوم ما نیز تغییر میکند.

 

برای کپی کردن دیکشنری میتوان از تابع copy() را بر روی شئ دیکشنری صدا زد.

 

حال میتوان با خیال راحت، دیکشنری اول را تغییر داد بدون آنکه در محتوای دیکشنری دوم (پشتیبان) مشکلی پیش بیاید.

 

در به روز رسانی های بعدی این مقاله به بررسی چگونگی استفاده از دیکشنری ها در حلقه و کار با لیست کلیدها و مقادیر آنها خواهیم پرداخت.

منتظر به روز رسانی مقاله باشید…