آموزش دیکشنری در پایتون و بررسی متدهای آن
دیکشنری در پایتون و متدهای مورد استفاده
آموزش دیکشنری در پایتون یکی از محبوبترین زبانهای برنامهنویسی است. پایتون یک زبان برنامه نویسی همه منظوره است و بسیاری از وبسایتها و نرمافزارهای شناخته شده با این زبان نوشته شدهاند. پایتون زبان قدرتمندی است که تواناییها و ویژگیهای بسیاری دارد؛ یکی از این ویژگیها دیکشنری می باشد؛ حتما تا به حال از دیکشنری استفاده کردهاید و با روش کار با آنها آشنا هستید.
در آموزش دیکشنری در python متوجه خواهید شد که کار با دیکشنریها بسیار ساده است تنها باید بدانید که به دنبال چه چیزی هستید، با داشتن کلمه مورد نظر در دیکشنری به دنبال آن کلمه میگردید و با پیدا کردن آن کلمه، میتوانید تمام توضیحات آن را بخوانید. در دیکشنریها هیچ کلمه کلیدی بیش از یکبار تکرار نشده است اما هیچ محدودیتی برای توضیحات آن وجود ندارد و گاها این توضیحات به چند خط هم میرسد. بسیاری از زبانهای برنامهنویسی هم مشابه زبانهای انسانی دارای دیکشنری هستند.
دیکشنریها در پایتون مشابه دیکشنری در دنیای واقعی هستند و از اصول آن ها پیروی میکنند. برای یادگیری بهتر این زبان میتوانید به مقاله زبان برنامه نویسی پایتون چیست؟ مراجعه نمایید.
دیکشنری های پایتون با دو المنت کلید و مقدار تعریف می شوند. در واقع کلید ها همان کلمات و مقادیر همان توضیحات در دیکشنری ها هستند. کلید ها باید تنها از یک المنت تشکیل شده باشند؛ در ادامه راجع به آن ها صحبت خواهیم کرد.
مفهوم دیکشنری در پایتون
در رابطه با دسترسی و مدیریت دیکشنری ها یاد میگیریم. در این آموزش تلاش شده است که بر تمام مفاهیم دیکشنریها مروری داشته باشیم. دیکشنری در پایتون نوع دیگری از دادههای مرکب است که بسیار شبیه به لیستها است. دیکشنریها (Dictionary) مشابه آرایهها (Associative Array) در زبانهایی مانند جاوا و php هستند.
در لیستها ترتیب اهمیت دارد و عناصر با ترتیب خاصی ذخیره شدهاند، اندیسهای عناصر، عددی هستند و اولین عنصر درون لیست و تاپل عدد صفر و دومین عنصر اندیس ۱ و الی آخر؛ در دیکشنری پایتون نوع دسترسی به مقادیر دیکشنری با لیستها و تاپلها متفاوت است؛ گرچه لیستها و دیکشنریها در پایتون بی شباهت به یکدیگر هم نیستند.
دیکشنریها در پایتون و لیستها شباهتهای بسیاری دارند:
- هردو تغییرپذیر هستند.
- هردو پویا هستند و در صورت نیاز میتوان آن ها را گسترش داد یا کوتاه کرد.
- هردو میتوانند تودرتو باشند. یک لیست میتواند شامل یک لیست دیگر باشد و یک دیکشنری در پایتون هم میتواند شامل دیکشنری دیگری باشد. همچنین یک دیکشنری در پایتون میتواند شامل یک لیست باشد و بالعکس.
دیکشنری ها پایتون
دیکشنریها میتوانند هر نوعی از داده باشند، اما غالبا از نوع دادهی عددی یا رشتهای هستند، در دیکشنری در پایتون بیشتر از دادههای عددی و رشتهای استفاده کرده ایم. دیکشنریها با کروشه یا {} تعریف میشوند و جهت دسترسی به مقادیر آن بایستی از آکولاد یا عملگر [] کمک گرفت. در واقع دیکشنری مجموعهای از جفت دادههای به هم مرتبط میباشد. اطلاعاتی که در داخل دیکشنریها قرار می گیرند معمولا به یکدیگر مرتبط هستند.
اما دیکشنریها در مورد نوع دسترسی به المنتها با لیستها تفاوت دارند. در لیستها المنتها به صورت مرتب قرار گرفتهاند و دسترسی به آنها نیز با توجه به محل قرارگیری آنها در لیست امکان پذیر است. در این آموزش دیکشنری در پایتون تعریف و دسترسی به مقادیر دیکشنریها به طور کامل به شما آموزش داده میشود.
تعریف دیکشنری در پایتون
پیاده سازی دیکشنری در پایتون مشابه تعریف آرایه است. به طور کلی دیکشنری ها مجموعه ای از جفت کلید-مقدار هستند. همچنین باید در نظر داشته باشید که یک کلید میتواند تعداد بیشتری مقدار داشته باشد، یعنی میتوانیم توضیحات بیشتری را به یک کلید نسبت دهیم.
1. شما میتوانید یک دیکشنری را داخل یک جفت نماد حایل ({}) تعریف کنید. هر عنصر درون دیکشنری با ویرگول از عنصر بعدی جدا میشود و هر عنصر به صورت یک زوج key : value است که key نقش اندیس و value مقدار انتساب داده شده به اندیس را دارند، یک دو نقطه هر کلید را از مقدارش مجزا میکند:
2. شما همچنین میتوانید برای تعریف دیکشنری از تابع از پیش تعریف شده پایتون “(dict)” استفاده کنید، در این آموزش دیکشنری در پایتون بیشتر از روش اول استفاده شده است.
آرگومان داخل این تابع باید به صورت جفت کلید-مقدار باشد:یکبار که یک دیکشنری را تعریف کردید، میتوانید هر زمان که بخواهید محتوای آن را نمایش دهید.
نمایش محتوای دیکشنری در پایتون
یکی از تفاوتهایی که دیکشنری در پایتون با دیکشنریها واقعی دارد، عدم توجه به ترتیب در این دیکشنریها است. در زمان نمایش، تمام محتوای دیکشنری به همان ترتیبی که تعریف شده بودند نمایش داده میشوند. اما اینگونه نمایش در رابطه با دیکشنریها کاربردی ندارد، به این خاطر که المنتهای دیکشنری با ایندکسهای عددی قابل دسترسی نیستند.
دسترسی به محتوای دیکشنری
شما میتوانید تمام محتوای یک دیکشنری را یکجا مشاهده کنید و یا هر مقدار را به صورت مجزا مشاهده کنید. همچنین میتوانید روی محتوای دیکشنری یک چرخه ایجاد کنید. دسترسی به محتوای دیکشنری توسط کلیدها صورت میگیرد. یکی از سادهترین راهها برای دسترسی به محتوای دیکشنری این است که میتوان با قرار دادن کلید مورد نظر داخل نماد ([]) به المنت مورد نظر دسترسی پیدا کرد:
مطمئنا با تابع (print) در پایتون آشنا هستید، شما به سادگی میتوانید با قرار دادن کلید داخل تابع به صورت مقابل (print(team[‘perspolis’])، مقدار آن را مشاهده کنید. شما همچنین میتوانید با قرار دادن نام دیکشنری در تابع پرینت تمام محتوای دیکشنری را نمایش دهید. اما با این کار تنها میتوانید از محتوای داخل دیکشنری مطلع شوید؛ در ادامه با اینکه چگونه میتوانید این محتوا را تغییر دهید و یا چه نوع تغییراتی میتوانید در این محتوا اعمال کنید، آشنا خواهید شد.
همانطور که در این آموزش دیکشنری در پایتون گفته شد، دیکشنری ها پویا هستند، به این معنی که هر زمان که بخواهید میتوانید آن ها را بهروز رسانی کنید ( کلید-مقدار جدیدی اضافه کنید، کلید-مقداری را حذف کنید، مقداری را بازنویسی کنید). برای حذف یکی از مقادیر از عبارت “del dictionary name” استفاده میکنیم.
نحوه اضافه و حذف کردن کلید-مقدار از دیکشنری
*هر چند که دسترسی به مقادیر دیکشنری به ترتیب آن ها ارتباطی ندارد، اما پایتون ترتیبها را به همان صورت که کلید-مقدارها تعریف شدهاند، حفظ میکند و در زمان نمایش آنها را به همان صورت نمایش میدهد. همچنین زمانی که یک کلید-مقدار جدید تعریف میکنید، محتوای جدید در انتهای دیکشنری قرار میگیرد و زمانی که یک کلید-مقدار را از دیکشنری حذف میکنید نیز ترتیب مقادیر باقی مانده به همان صورت حفظ میشود.
در تعریف دیکشنری میتوانید داخل یک دیکشنری انواع محتوا را مانند: اعداد، لیست، رشته و یا دیکشنری دیگر داشته باشید. همچنین همانگونه که در تعریف مقادیر محدودیت به خصوصی وجود ندارد در تعریف کلیدها نیز به همین صورت است.
در صورتی که بخواهید می توانید یک دیکشنری خالی تعریف کنید و هر زمان که بخواهید در آن محتوا قرار دهید:
انواع محتوا در دیکشنری
برای دسترسی به لیستی که در داخل یک دیکشنری تعریف شده است، به ایندکس آن لیست نیاز داریم؛ همچنین برای دسترس به مقادیر دیکشنری که در داخل یک دیکشنری دیگر تعریف شده است، به کلید دیکشنری ذکر شده نیاز داریم:
دسترسی به محتوای لیست ها و دیکشنری در داخل یک دیکشنری همانطور که گفته شد در انتخاب کلید در دیکشنری نیازی نیست همه کلیدها نوع یکسانی داشته باشند:
انواع کلید در دیکشنری
شما میتوانید از دیکشنریها برای مقاصد مختلفی استفاده کنید اما محدودیتهایی نیز در رابطه با کلیدها و مقادیر وجود دارد که باید آنها را مد نظر داشته باشید. در ادامه آموزش دیکشنری در پایتون این محدودیتها را مرور می کنیم. همچنین میتوانید به مقاله ی زبان برنامه نویسی پایتون را بهتر بشناسیم مراجعه نمایید.
محدودیت های کلیدهای دیکشنری
حتما تا به اینجای متوجه شدهاید که می توان انواع داده را برای اسامی کلیدها انتخاب کرد و لزومی ندارد که کلید و مقدار آن نوع مشابهی داشته باشند، همچنین میتوان شئ ها و توابع از پیش ساخته شده پایتون را نیز به عنوان کلید تعریف کنید.
اما محدودیت هایی که در انتخاب کلیدها وجود دارد:
- هر کلید تنها یکبار میتواند تعریف شود. پایتون کلیدهای تکراری را نمیپذیرد. دیکشنری هر کلید را به مقدار مشخصی نسبت میدهد، در نتیجه استفاده از یک برای مقادیر متفاوت اشتباه است. در صورتی که پس از تعریف یک کلید مجددا برای کلید مورد نظر مقدار دیگری تعریف کنید، محتوای کلید بازنویسی میشود و مقدار اولیه از بین میرود.
- کلیدهای انتخابی باید تغییر ناپذیر باشند مانند: int, string, Boolean. زوج مرتب هم میتواند به عنوان کلید بهکار رود. اما لیست و دیکشنری نمیتوانند به عنوان کلید در نظر گرفته شوند زیرا هردو تغییرپذیر هستند.
- دیکشنری در پایتون به بزرگ و کوچک بودن حروف حساس است؛ به این معنی که یک کلید را میتوان یکبار با حروف کوچک و بار دیگر با حروف بزرگ نوشت و دیکشنری پایتون هر یک را به عنوان کلید مجزا در نظر میگیرد.
- همانطور که مشاهده کردید هیچ محدودیتی در رابطه با محتوای دیکشنری وجود ندارد و تمام انواع داده، حتی لیست ها و دیکشنری ها نیز می توانند به عنوان محتوای یک دیکشنری تعریف شوند.
متدهای از پیش ساخته شده پایتون
مشابه لیست ها چندین متد از پیش ساخته شده در پایتون وجود دارد که برای دیکشنریها نیز قابل پیادهسازی است که در ادامه به آن ها میپردازیم:
- (Dictionaryname.clear)
- تمام محتوای دیکشنری یعنی تمام کلید-مقدارها را پاک میکند و دیکشنری را خالی میکند.
- (‘Dictionaryname.get key’)
- متد .(get) پایتون راه سادهای برای دسترسی به محتوای مدنظرمان است. در واقع این متد کلید نام برده ما را صرف نظر از اینکه وجود دارد یا خیر جستجو کرده و نتیجه را بر می گرداند:
- مثالی از کاربرد .clear) , .get)
آموزش دیکشنری در پایتون Dictionaryname.items
این متد لیستی از زوج کلید-مقدار را به عنوان نتیجه بر می گرداند. اولین آیتم در هر زوج مرتب کلید و دومین آیتم مقدار کلید است.
Dictionaryname.keys
این متد لیستی از تمام کلیدهای موجود در دیکشنری را نمایش میدهد مثالی از متدهای .items) , .keys)
Dictionaryname.values
این متد مشابه متد .(items) است با این تفاوت که (values) لیستی از مقادیر موجود در دیکشنری را برمیگرداند و کاری به کلیدهای آنها ندارد. هر عنصر به هر تعداد که در دیکشنری تکرار شده باشد به همان تعداد در نتیجه نمایش داده می شود.
کلید مورد نظرمان را از دیکشنری پاک کرده و مقدار آن را نمایش می دهد.
مشاهده می کنید که زمانی که این متد را اجرا میکنیم کلید نام برده ما یعنی ” c ” در دیکشنری موجود است، در نتیجه این کلید حذف و مقدار آن نمایش داده میشود. اما هنگامی که کلید” z ” را به متد می دهیم، به خاطر اینکه این کلید در دیکشنری موجود نیست با پیغام خطا مواجه میشویم.
Dictionaryname.popitem
برای پاک کردن یک زوج کلید-مقدار از دیکشنری به صورت تصادفی استفاده میشود. اگر دیکشنری خالی با پیغام خطا میدهد.
Dictionaryname.update
یک دیکشنری را با یک دیکشنری دیگر و یا زوج کلید-مقدار ادغام می کند.
در حالتی که obj یک دیکشنری باشد:
- اگر کلید در دیکشنری ما وجود نداشته باشد، کلید از داخلobj به دیکشنری ما اضافه میشود.
- اگر کلید در دیکشنری ما موجود باشد، مقدار آن به مقدار کلید مشابه از obj تغییر پیدا میکند.
همانطور که در مثال بالا مشاهده میکنید، در ادغام دو دیکشنری f,g دو کلید”q” و “o” به دیکشنری f اضافه شدهاند و دو کلید “a” و “m” که در دیکشنری f وجود دارند، بازنویسی شدهاند. برای ادغام یک یا چند کلید با یک دیکشنری به دو صورت میتوان عمل کرد:
- وارد کردن کلید-مقدار به صورت زوج مرتب
- وارد کردن آنها به صورت لیستی از کلیدها همراه با مقادیرشان
Dictionaryname.setdefault
این متد یک کلید و مقدار را به عنوان ورودی می گیرد و در دیکشنری مورد نظرمان به دنبال کلید ذکر شده می گردد، در صورتی که کلید مورد نظر دارای مقدار بود، آن مقدار را بر می گرداند، در غیر این صورت مقداری که به متد داده شده بود به عنوان محتوای آن کلید در نظر گرفته می شود.
این متد راه دیگری برای دسترسی به محتوای دیکشنری می باشد. در زمان استفاده از این متد ذکر نام کلید اجباری است اما قرار دادن مقدار اجباری نیست.
Dictionaryname.copy
یک کپی از دیکشنری موجود ایجاد می کند. هیچ المنت ورودی ندارد. (Len) درصورتی که بخواهید می توانید با استفاده ای این متد اندازه دیکشنری را به دست آورید.مثالی از متد (len)
مرور و نمایش محتوای دیکشنری(ایجاد چرخه روی دیکشنری)
اگر با نوشتن for در پایتون آشنا باشید، این کار بسیار ساده است. تنها لازم است چرخه loop و یکی از متدهایی را که بالاتر گفته شد، ادغام کنید؛ در واقع باید با استفاده از یک چرخه برای هر یک از کلید-مقدار ها یکبار متد موردنظرتان را اجرا کنید.
مفاهیم پایه دیکشنری، همچون چگونگی دسترسی و ایجاد تغییر در اطلاعات دیکشنری را بررسی کردیم. به طور کلی دیکشنری ها در زبانهای برنامهنویسی نوعی ساختار دادهای هستند که به شما این اجازه را می دهند که اطلاعاتی را که به نوعی به یکدیگر مرتبط هستند را ذخیره کنید.
لیستها و دیکشنریها دو نوع داده پر استفاده در پایتون به شمار میروند. همانطور که دیدید شباهتهای بسیاری هم دارند. اما در نحوه دسترسی به محتوا متفاوت هستند. لیستها با ایندکس و براساس ترتیب مشخص و المنتهای دیکشنری به وسیله کلید قابل دسترسی هستند. به همین خاطر لیستها و دیکشنریها برای کاربردهای متفاوتی استفاده میشوند. دلایل بسیاری برای استفاده از دیکشنری ها وجود دارد که در این آموزش دیکشنری در پایتون به آنها اشاره کردیم از جمله:
- اطلاعات در دیکشنریها بدون ترتیب و مانند نقشه ذخیره میشود.
- دیکشنری در پایتون مشابه دیکشنری در دنیای واقعی است و کار کردن با آن هم ملزم دانستن کلمه کلیدی بوده و بسیار ساده است.