فصل دوازدهم آموزش پایتون مقدماتی - Dictionary یا فرهنگ‌‌لغت ها

سلام دوستانبا ادامه ی کتاب پایتون مقدماتی که به همراه دوست عزیزم جناب مهندس مهدی عباسپور شاهمرس نوشته و چاپ کردیم در خدمتتون هستیم. https://virgool.io/@mahdi.abbaspour.sh در دیکشنری، هر کلید با یک علامت دونقطه، از مقدار آن جدا شده و در کل، تمامی اعضا و عناصر آن توسط ویرگول از هم جدا می‌‌شوند. البته همه چیز اعم از کلید و مقدار، مابین جفت‌‌کوتیشن قرار می‌‌گیرند. همچنین برای تعریف دیکشنری خالی نیز می‌‌توان از علامت‌‌های { } استفاده‌‌نمود.کلید‌‌های دیکشنری منحصر به‌‌فرد هستند. حال این که ممکن‌‌است مقادیر آن‌‌ها نیز یکسان باشد. مقادیر می‌‌توانند از هر نوعی باشد، در حالی که کلیدها باید از نوع داده‌‌ی تغییرناپذیری مانند رشته، عدد ویا تاپل باشند.12-1- دسترسی به مقادیر دیکشنریبرای دسترسی به مقادیر عناصر این نوع داده، همانند شکل (12-1) می‌‌توانید از وارد‌‌نمودن مقدار کلید عنصر مدنظر در بین علامت‌‌های براکت مربعی استفاده‌‌کنید. با اجرای این مثال در خروجی، به ترتیب مقادیر ‘Zara’ و 7 را خواهیم‌‌داشت.شکل (12-1)همچنین اگر قصد داشته‌‌باشیم، به عنصری مانند ‘Alice’ دسترسی داشته‌‌باشیم که در این دیکشنری وجود ندارد، با خطایی شبیه به شکل (12-2) رو به رو خواهیم‌‌شد.شکل (12-2)12-2- به روز رسانی دیکشنریشما می‌‌توانید یک دیکشنری را با اضافه‌‌کردن ورودی‌‌جدید ویا دوتاییِ کلید و مقدار، به روز کنید. همچنین همانند شکل (12-3) می‌‌توانید اقدام به ویرایش ویا حذف یکی از آن‌‌ها نمایید.شکل (12-3)همان طوری که در این قطعه کد دیدید، هر دو دستور به یک شکل هستند. به دلیل وجود کلید ‘Age’ در دیکشنری، این دستور عمل ویرایش را روی آن اعمال خواهدکرد. این در حالی است که به دلیل عدم وجود کلید ‘School’ در دیکشنری ما، اجرای این دستور، موجب ایجاد کلید جدیدی خواهدشد.12-3- حذف عناصر دیکشنریشما به راحتی می‌‌توانید با استفاده از دستور del هر عنصر دلخواهی را از دیکشنری حذف‌‌کنید. به طور کلی، امکان حذف کل محتوای یک دیکشنری نیز وجود دارد. این کار با استفاده از دستور clean انجام می شود. شکل (12-4) مثال ساده‌‌ای از این مطلب را نشان می‌‌دهد. به یاد داشته‌‌باشید که در خروجی دستور چاپ، دیکشنری ما به صورت مرتب شده بر اساس حروف الفبا ظاهر می‌‌شود.همان طوری که از خروجی این مثال در شکل (12-5) مشخص‌‌است، در مثال اول عنصری با کلید ‘Name’ از دیکشنری ما حذف شده‌‌است. همچنین مثال دوم برای حذف تمام عناصر دیکشنری به کار رفته‌‌است. البته در سومین مثال، به دلیل ‌‌حذف این دیکشنری از حافظه، دسترسی به کلید ‘Age’ ممکن‌‌نبوده و با پیغام خطا رو برو می‌‌شویم.شکل (12-4)شکل (12-5)در مورد متد ( ) clear به صورت مجزا و در بخش مربوط به متدها بحث خواهیم‌‌کرد.12-4- خواص کلیدهای دیکشنریهمان گونه که در مبحث قبلی به آن اشاره‌‌کردیم، بر خلاف لیست ها که مقادیر آن می‌‌تواند هر نوع داده‌‌ی استانداردی باشد، کلیدها تنها بایستی از نوع داده‌‌ی تغییرناپذیر مانند رشته، عدد ویا تاپل باشند. با این حال ذکر دو نکته ضروری است.1) بیشتر از یک ورودی برای هر کلید مجاز نیست. به عبارت دیگر ما مجاز به استفاده از هیچ کلید تکراری نیستیم. اگر با عناصری مواجه‌‌شدیم که برای یک کلید، دو مقدار متفاوت دارند، آخرین انتساب، مورد قبول خواهدبود. برای مثال در شکل (12-6) با توجه به انتصاب دو مقدار مجزا برای کلید ‘ Name’ در خروجی اجرای قطعه کد، مقدار دوم یعنی ‘ Manni’ را خواهیم‌‌داشت.شکل (12-6)2) کلیدها باید تغییر‌‌ناپذیر باشند. به این معنی که شما می‌‌توانید از رشته، عدد ویا تاپل استفاده‌‌کنید. همان طوری که در شکل (12-7) می‌‌بینید، استفاده از عناصری مانند [‘key’] مجاز نیست.شکل (12-7)با اجرای این مثال با خطایی همانند شکل (12-8) مواجه خواهیم‌‌شد.شکل (12-8)12-5- توابع داخلی دیکشنریاز آن جایی که عملکرد و نحوه‌‌ی استفاده از تابع ( ) len شبیه به چیزی که در لیست‌ و تاپل دیدید، است، از توضیح بیشتر در این دو مورد صرف نظر نموده و فقط اشاره می‌‌کنیم که در این جا ورودی آن‌‌ها، دیکشنری خواهدبود.در این قسمت اشاره‌‌ای به دو تابع دیگر خواهیم‌‌داشت که علاوه‌‌بر دیکشنری، برای سایر انواع داده نیز مورد استفاده قرار می‌‌گیرند.1) تابع ( ) str برای تبدیل انواع داده به رشته، کاربرد دارد. همان گونه که در شکل (12-9) می‌‌بینید، برای این کار کافی است، نوع داده‌‌ی مدنظر را درون پارانتز قرار داده و به عنوان ورودی تابع درنظر گیریم.شکل (12-9)نتیجه‌‌ی اجرای این قطعه کد، به شکل (12-10) خواهدبود.شکل (12-10)2) تابع ( ) type برای برگرداندن نوع متغیر داخل پارانتز استفاده می‌‌شود. شکل (12-11) نمونه‌‌ای از استفاده‌‌ی این تابع را نشان می‌‌دهد.شکل (12-11)برای چاپ خروجی این تابع از عملگرهای قالب‌‌بندی رشته استفاده می‌‌شود. با اجرای این مثال، خروجی ما به صورت شکل (12-12) می‌‌شود که بیانگر نوع دیکشنری است.شکل (12-12)12-6- متدهای کار با دیکشنریدر مبحث نهایی این فصل، به توضیح در مورد تعدادی از متدهایی خواهیم‌‌پرداخت که برای دستکاری دیکشنری استفاده می‌‌شوند.12-6-1- متد Clearهمان طوری که در مبحث قبلی و در شکل (12-4) به آن اشاره‌‌شد، از این متد برای پاک‌‌کردن تمام عناصر موجود در دیکشنری و در نتیجه تبدیل طول آن به صفر استفاده می‌‌شود.12-6-2- متد Copyاگر بخواهیم یک کپی از دیکشنری فعلی را با عنوان دیکشنری جدید، داشته‌‌باشیم، همانند شکل (12-13) می‌‌توان به راحتی از این متد استفاده‌‌نمود.شکل (12-13)حال اگر از دستور print (dict2) استفاده‌‌کنید، خواهیددید که عناصر آن همانند عناصر dict1 است.12-6-3- متد FromKeysاین متد می‌‌تواند به وسیله مجموعه‌‌ای از داده‌‌های یک دنباله، دیکشنریِ جدیدی را ایجاد نماید. در شکل (12-14)، دو نوع مختلف از این کاربرد را نشان‌‌دادیم.شکل (12-14)همان طوری که در شکل (12-15) مشاهده می‌‌کنید، حاصل اجرای مثال اول این قطعه کد، یک دیکشنری با کلیدهایی از تاپل seq بوده و مقادیر آن برابر None است. در حالی که خروجی دومین مثال، کلیدها برابر مقادیر ذکرشده بوده و مقادیر همه‌‌ی آن‌‌ها برابر 10 است.شکل (12-15)12-6-4- متد Has_Keyبرای بررسی وجود یک عنصر خاص در دیکشنری از این متد استفاده می‌‌نماییم. روشن است که در صورت وجود، مقدار True و در غیر این صورت، مقدار False برمی‌‌گردد. در پایتون نسخه 3 این متد با دستور in جایگزین شده است. شکل (12-16) نمونه‌‌ای از این کاربرد را نشان می‌‌دهد.شکل (12-16)با اجرای این قطعه کد مشاهده می‌‌کنیم که به دلیل وجود کلید ‘ Age’ مقدار True را خواهیم‌‌داشت. همچنین عدم وجود کلید ‘Gender’ خروجی False را درپی دارد.12-6-5- متد Itemsاین متد برای ما یک لیست، حاوی دوتایی کلید و مقدار را برمی‌‌گرداند. در شکل (12-17)، این مطلب را مشاهده می‌‌کنید.شکل (12-17)خروجی اجرای این مثال، به شکل (12-18) خواهدبود.شکل (12-18)12-6-6- متدهای Keys و Valuesبه وسیله‌‌ی این متدها می‌‌توانیم به ترتیب، لیستی از کلیدها ویا مقادیر یک دیکشنری را داشته‌‌باشیم. مثالی در مورد استفاده از این دو متد را در شکل (12-19) خواهید دید.شکل (12-19)پس از اجرای این مثال، خروجی ما به شکل (12-20) خواهدشد.شکل (12-20)12-6-7- متد Getاستفاده از این متد، موجب برگشت مقدار کلید خاصی، در صورت وجود، می‌‌شود. عدم وجود آن، مقدار None را در پی خواهدداشت. البته در شکل (12-21) مشاهده می‌‌کنید که، می‌‌توان از مقدار دلخواهی به جای None استفاده‌‌کرد.شکل (12-21)خروجی این سه دستور چاپ به ترتیب برابر 7، None و Never است.12-6-8- متد SetDefaultتفاوت این متد با ( ) get در این است که، متد مذکور علاوه بر نمایش خروجی، درصورت عدم وجود کلید مدنظر، آن را با مقدار تعیین‌‌شده، به دیکشنری اضافه می‌‌کند. از روی شکل (12-22) بهتر متوجه این مطلب خواهیم‌‌شد.شکل (12-22)در نهایت می‌‌بینیم که خروجی این مثال به شکل (12-23) خواهدبود.شکل (12-23)12-6-9- متد Updateآخرین مطلب مورد بحث ما از این بخش، متدی‌‌است که به ما اجازه‌‌ی افزودن گروهیِ عناصر یک دیکشنری به دیکشنری دیگر را صادر می‌‌کند. در شکل (12-24) خواهید دید که تمامی عناصر dict2 به dict1 افزوده‌‌شده و در خروجی چاپ می‌‌گردد.شکل (12-24)با اجرای این قطعه کد، شکل (12-25) در خروجی ظاهر می‌‌شود.شکل (12-25)در پست بعدی به تاریخ و زمان خواهیم پرداخت. با ما همراه باشین.