مقاله قبلی: تاپل ها در زبان برنامه نویسی پایتون
در این مقاله از سری مقالات آموزش پایتون، قصد داریم اطلاعات جامعی را در خصوص ساختمان داده دیکشنری در اختیار شما قرار دهیم اطلاعاتی از قبیل: نحوه ایجاد و حذف یک دیکشنری، دسترسی به عناصر آن و به روز رسانی مقادیر آن ها، اضافه کردن آیتم های جدید به دیکشنری و یا حذف عناصر موجود و نهایتا معرفی مهم ترین متدها و توابع درون ساخته قابل استفاده در دیکشنری ها.
دیکشنری و نحوه ایجاد آن
دیکشنری مجموعه ای از داده های نامرتب و تغییر پذیر است. اعضای یک دیکشنری در داخل یک براکت مجعد {} محصور شده و با علامت کاما از هم جدا می شوند. اعضای یک دیکشنری به صورت جفت داده های کلید و مقدار (key:value) هستند.
برخلاف مقادیر (values) یک دیکشنری که می توانند از هر نوع داده ای باشند و تکرار هم در آنها مجاز است، کلیدها تنها می توانند از نوع داده رشته، عدد و یا تاپل با اعضای غیرقابل تغییر باشند. ضمن اینکه یک دیکشنری مجاز به داشتن دو یا چند کلید تکراری نیست. در بخش های بعدی همین مقاله به شما خواهیم گفت که پایتون با کلیدهای تکراری دیکشنری، چگونه برخورد می کند. در مثال زیر مشاهده می کنید که کلیدها از نوع عدد ، رشته و یا ترکیبی از این دو نوع هستند.
برای ایجاد یک دیکشنری می توانید از تابع سازنده dict() هم استفاده کنید. منتها در استفاده از این تابع باید توجه داشته باشید که در این شیوه:
- عناصر دیکشنری به جای یک براکت مجعد در داخل دو علامت پرانتز باز و بسته محصور شده اند.
- کلیدها، دیگر لیترال ای رشته ای نیستند یعنی نباید آن ها را در داخل علامت کوتیشن بنویسید.
- برای انتساب مقادیر به کلیدها، به جای علامت کولن: از علامت تساوی = استفاده می شود.
علاوه بر این، با این تابع سازنده، می توانید یک دیکشنری خالی هم ایجاد کنید برای این کار، کافیست که این تابع را بدون هیچ گونه پارامتری بنویسید.
یک مثال کاربردی از دیکشنری ها
شما با ساختمان داده دیکشنری می توانید یک بانک اطلاعاتی که در بردارنده شماره تلفن افراد مختلف است را ایجاد کنید.
نحوه دسترسی به اعضای یک دیکشنری
در دیکشنری ها برخلاف سایر انواع داده های پایتون که از ایندکس(اندیس) برای دسترسی به عناصر استفاده می کنند، از کلیدها برای این کار استفاده می شود. بنابراین برای دسترسی به اعضای یک دیکشنری کافیست کلید مربوطه را در داخل علامت براکت [] قرار دهید تا بتوانید به مقدار متناظر آن کلید دسترسی پیدا کنید.
علاوه بر این، برای دسترسی به عناصر یک دیکشنری می توانید به جای استفاده از روش بالا از تابع get() هم استفاده کنید. تنها تفاوت این دو روش این است که اگر بخواهید به مقدار کلیدی دسترسی پیدا کنید که آن کلید در دیکشنری وجود ندارد، در روش اول با خطای KeyError مواجه می شوید حال آن که تابع get() مقدار None را بر می گرداند.
نحوه تغییر مقادیر کلیدهای یک دیکشنری
شما می توانید مقدار هر یک از کلیدها را با ذکر نام کلید در داخل علامت براکت و استفاده از عملگر انتساب = تغییر دهید. مثلا ما در قطعه کد زیر، مقدار کلید سن (age) را به 20 تغییر داده ایم.
استفاده از حلقه های تکرار برای دسترسی به کلیدها و مقادیر یک دیکشنری
هم چنین توسط یک حلقه تکرار می توانید از ابتدا تا انتهای یک دیکشنری را پیمایش کرده و بدین ترتیب اعضای آن را چاپ کنید. البته داده های برگشتی حاصل از این حلقه، تنها کلیدهای دیکشنری هستند نه مقادیر آن ها.
با این حال برای برگرداندن مقادیر دیکشنری هم، روش هایی وجود دارد. در مثال زیر به یکی از توابع درون ساخته دیکشنری ها تحت عنوان value اشاره کرده ایم که همه مقادیر موجود در یک دیکشنری را بر می گرداند.
نمایش همزمان کلیدها و مقادیر متناظر آن ها
دیکشنری ها تابع دیگری به نام items() دارند که زوج مرتبی شامل کلیدها و مقادیر آن ها را بر می گرداند. بنابراین اگر از این تابع در داخل یک حلقه for استفاده کنیم می توانیم تمامی کلیدها و مقادیر یک دیکشنری را به صورت زوج مرتب چاپ کنیم.
بررسی وجود یک کلید در دیکشنری
گاهی اوقات نیاز دارید بدانید که آیا کلید خاصی که مد نظر دارید عضو یک دیکشنری هست یا نه. در این مواقع می توانید از عملگر in استفاده کنید. به طور مشابه عملگر not in نیز عدم عضویت یک کلید خاص را با برگرداندن مقدار true گزارش می دهد. لازم به ذکر است که این آزمون عضویت تنها برای کلیدهاست نه مقادیر دیکشنری. مثلا همان طور که در قطعه کد زیر می بینید با این که 25 جزء مقادیر دیکشنری squares است اما عملگر عضویت in مقدار false را برگردانده است. چون این عملگر، کلیدی با مقدار 49 را نیافته است.
اضافه کردن آیتم هایی به دیکشنری
همان طور که در ابتدای مقاله گفتیم، دیکشنری ها ساختمان داده های تغییر پذیر هستند لذا مشابه لیست ها، می توان عناصر دیگری را به دیکشنری ها افزود و آن ها را گسترش داد. روش کار هم تقریبا یکسان است با این تفاوت که در این جا اندیس های داخل علامت براکت []، به جای اعداد، کلیدهای دیکشنری هستند.
حذف عناصر یک دیکشنری
برای حذف عناصر یک دیکشنری هم بسته به شیوه حذف شما، روش های متعددی وجود دارد.
-
حذف یک عنصر خاص
ممکن است بخواهید آیتمی با یک کلید خاص را حذف کنید. در این صورت باید از تابع pop() استفاده کنید. درواقع از این تابع زمانی استفاده می کنیم که کلیدی از کلیدهای دیکشنری را در اختیار داشته باشیم.
علاوه بر این، با کلمه کلیدی del هم می توانید همین کار را انجام دهید.
-
حذف آخرین عنصر
ممکن است بخواهید آخرین آیتم یک دیکشنری را حذف کنید. در این صورت تابع popitem() به کارتان خواهد آمد. البته در نسخه های قبل از نسخه 3.7 پایتون، همین تابع، به جای آخرین آیتم، یکی از عناصر دیکشنری را به صورت تصادفی انتخاب کرده و حذف می کند. توجه داشته باشید که اگر این تابع را برای یک دیکشنری خالی به کار بگیرید با خطای KeyError مواجه خواهید شد.
-
حذف کامل یک لیست
قبلا توسط کلمه کلید del توانستیم آیتمی را که کلیدش را در اختیار داشتیم حذف کنیم جالب است بدانید که توسط همین کلمه کلیدی می توانیم کل یک دیکشنری را نیز حذف کنیم. در قطعه کد زیر می بینید که پس از حذف یک دیکشنری، هر گونه تلاش برای دسترسی به آن، باعث بروز خطای NameError می شود.
-
خالی کردن یک دیکشنری
گاهی اوقات نیاز دارید که به جای حذف یک دیکشنری، تنها اعضایش را به صورت یک جا حذف کرده و آن را خالی کنید. تابعی که چنین کاری را برای شما انجام می دهد تابع clear() نام دارد.
محاسبه طول یک دیکشنری
برای اینکه بدانید دیکشنری شما شامل چه تعداد آیتم (جفت های کلید- مقدار) هست، می توانید مشابه لیست ها از تابع درون ساخته len() استفاده کنید.
نحوه برخورد پایتون با کلیدهای تکراری در دیکشنری
اگر دیکشنری دارای یک کلید تکراری باشد، پایتون آخرین داده تکراری را در نظر می گیرد. مثلا در قطعه کد زیر می بینید که کلید name، یک کلید تکراری با دو مقدار مجزا می باشد. حال وقتی می خواهیم مقدار این کلید را در خروجی نشان دهیم مقدار آخرین کلید name که sara است برگردانده می شود. وقتی هم دستور حذف کلید تکراری و مقدارش را صادر می کنیم تمامی نسخه های موجود از آن کلید، حذف می شوند.
مرتب سازی یک دیکشنری
برای مرتب سازی یک دیکشنری، می توانید از تابع درون ساخته sorted() استفاده کنید. این تابع لیست جدیدی را بر می گرداند که تنها حاوی کلیدهای دیکشنری اولیه است و این کلیدها براساس حروف الفبا (اگر کلیدها از نوع رشته باشند) یا به ترتیب صعودی بودن (اگر کلیدها از نوع عدد باشند) مرتب شده اند. البته شما نمی توانید این تابع را بر روی یک دیکشنری که دارای ترکیبی از کلیدهایی از نوع رشته و عدد می باشد اعمال کنید چرا که در این صورت با خطای TypeError مواجه می شوید.
لیست کردن تمامی کلیدها و مقادیر دیکشنری
برای مشاهده همه کلیدهای یک دیکشنری، کافیست در کنار نام دیکشنری از تابع keys استفاده کنید. تابع values نیز همه مقادیر یک دیکشنری را لیست می کند.
ساخت دیکشنری با فرمول دلخواه
اگر دیکشنری را به خوبی یاد گرفته باشید می توانید توسط ساختار زیر، اعضای یک دیکشنری را با فرمولی که خودتان مد نظر دارید تولید کنید. در مثال زیر دیکشنری تولیدی ما شامل زوج مرتب هایی از اعداد 0 تا 5 و مربع آن ها می باشد.
قطعه کد بالا در حقیقت معادل کد زیر است:
فیلتر کردن اعضای یک دیکشنری
حتی شما می توانید اعضای دیکشنری خود را با استفاده از ساختار تصمیم گیری if فیلتر کرده و یک دیکشنری جدید را تولید کنید. مثلا اگر ما در قطعه کد بالا از دستور if x%2==1 استفاده کنیم می توانیم دیکشنری خود را تنها به ازای کلیدهای فرد تولید کنیم.
یک پروژه ساده با استفاده از دیکشنری ها
در این اسکریپت، از کاربر درخواست می شود که اطلاعات خودش را وارد کنید سپس این اطلاعات در یک دیکشنری درج شده و نهایتا به کاربر نشان داده می شوند.
در این مقاله با دیکشنری در زبان برنامه نویسی پایتون آشنا شدید امیدواریم مورد توجه شما قرار گرفته باشد. در آموزش های بعدی در زبان پایتون با ما همراه باشید.
مقاله بعدی: آموزش زبان پایتون – ساختار داده ای مجموعه (set)
ترجمه: رقیه آقایاری