دوره H برنامه نویسی پایتون
فصل پنجم: نوعهای دیگر
درس اول: دیکشنریها در پایتون
دیکشنریها، ساختار دادهای هستند که برای مپ کردن کلیدها و مقادیر دلخواه استفاده میشوند! در واقع دیکشنریها همانند لیستها هستند، با این تفاوت اصلی که میتوان ایندکس آنها را به دلخواه تنظیم کرد! برای مثال، میتوان ایندکسی را بصورت رشتههای و برابر مقدار fullkade تنظیم کرده و سپس مقداری را درون آن قرار داد! در این حالت، به جای ایندکس به آن کلید گفته میشود.
تعریف یک دیکشنری
دیکشنریها به کمک دو کروشه { } باز و بسته، بصورت زیر تعریف میشوند:
1 2 3 |
ages = {"Hadi": 24, "Mahdi": 42, "Reza": 58} print(ages["Hadi"]) print(ages["Mahdi"]) |
خروجی:
1 2 3 4 |
>>> 24 42 >>> |
در واقع در اینجا سه ایندکس داریم. ایندکس اول برابر Hadi بوده و مقدار آن 24 است. ایندکس دوم برابر Mahdi بوده و مقدار آن 42 است. ایندکس سوم برابر Reza بوده و مقدار آن 58 است! سپس در ادامه، توسط این ایندکسها که همان کلیدها هستند، به مقادیر دلخواهی دسترسی پیدا کرده و آنها را چاپ میکنیم.
خطای KeyError
اگر سعی کنید به کلیدی که وجود ندارد دسترسی داشته باشید، در این صورت خطای KeyError پرتاب خواهد شد. برای مثال:
1 2 3 4 5 6 7 8 |
primary = { "red": [255, 0, 0], "green": [0, 255, 0], "blue": [0, 0, 255], } print(primary["red"]) print(primary["yellow"]) |
و خروجی:
1 2 3 4 5 |
>>> [255, 0, 0] KeyError: 'yellow' >>> |
اول اینکه مقدار میتواند همانند لیستها هرچیزی باشد؛ حتی یک لیست یا دیکشنری جدید! و دوم اینکه در کد بالا، سعی شده است تا مقدار کلیدِ yellow را بدست آورد و از آنجایی که چنین کلیدی در دیکشنری وجود ندارد، خطای KeyError رخ میدهد.
کلیدهای دیکشنری
فقط آّبجکتهای immutable (تغییر ناپذیر/یعنی بعد از ایجاد نمیتواند تغییر کند) میتوانند به عنوان کلید برای دیکشنریها استفاده شوند؛ و بنابراین، تنها آبجکتهای mutable بایستی برای کلیدها استفاده شوند. در غیر اینصورت، خطای TypeError رخ میدهد. در نتیجه از آنجاییه که لیستها و دیکشنریها mutable نیستند، بنابراین انتظار میرود خطا رخ دهد. به مثال زیر دقت کنید:
1 2 3 |
bad_dict = { [1, 2, 3]: "one two three", } |
خروجی:
1 2 3 |
>>> TypeError: unhashable type: 'list' >>> |
تخصیص کلید جدید
در بالا نیز اشاره شد که همانند لیستها، کلیدهای دیکشنری نیز میتوانند به مقادیر مختلفی اشاره کنند. با این حال برخلاف لیستها، میتوان پس از تعریف دیشکنری، به یک کلیدی که وجود ندارد، مقدار جدیدی را اختصاص داد! بصورت زیر:
1 2 3 4 |
squares = {1: 1, 2: 4, 3: "error", 4: 16,} squares[8] = 64 squares[3] = 9 print(squares) |
خورجی:
1 |
{1: 1, 2: 4, 3: 9, 4: 16, 8: 64} |
بررسی وجود داشتن کلید
جهت بررسی اینکه آیا کلیدی در یک دیکشنری تعریف شده است یا خیر، بایستی از in و not in استفاده کرد؛ که اولی وجود داشتن را بررسی کرده و دومی وجود نداشتن را. 🙂 بصورت زیر:
1 2 3 4 5 6 7 8 |
nums = { 1: "one", 2: "two", 3: "three", } print(1 in nums) print("three" in nums) print(4 not in nums) |
خروجی:
1 2 3 4 5 |
>>> True False True >>> |
متد get دیکشنریها
یکی از متدهای کاربردی دیکشنریها، متد get است که چیزی شبیه به ایندکسینگ میباشد؛ با استفاده از این متد میتوان مقدار کلیدی را بدست آورد اما تفاوت آن در استفاده از حالت عادی (ایندکسینگ)، این است که اگر کلیدی در دیکشنری وجود نداشته باشد، خطایی رخ نداده و آن میتواند مقدار دیگری که بصورت پیشفرض توسط ما تنظیم میشود یا مقدار None را برگرداند. بصورت زیر:
1 2 3 4 5 6 7 8 9 |
pairs = {1: "apple", "orange": [2, 3, 4], True: False, None: "True", } print(pairs.get("orange")) print(pairs.get(7)) print(pairs.get(12345, "not in dictionary")) |
خروجی:
1 2 3 4 5 |
>>> [2, 3, 4] None not in dictionary >>> |
بنابراین میتوان پارامتر اول متد get را برابر مقدار کلید و پارمامتر دوم آن را مقدار پیشفرض قرار داد. اگر پارامتر دوم نیز تنظیم نشود، مقدار پیشفرض None خواهد بود.
نظرات ثبت شده بدون دیدگاه