دیکشنری در زبان برنامه نویسی پایتون یک نوع دادهای محبوب و نسبتاً پر کاربرد است. این نوع دادهای در اصل یک نوع لیست انجمنی (Associative) یا لیست کلید-مقدار (key-value) هست. در این آموزش به طور جامع کار با دیکشنری در پایتون را یاد میگیریم.
معمولاً از دیکشنری پایتون در جاهایی استفاده میکنیم که نیاز داریم مقادیری را با استفاده از یک کلید مرتبط با هر کدام از آنها شناسایی کنیم. این مقادیر هر چیزی میتوانند باشند؛ برای مثال، رشته متنی، عدد، شئ و … .
در ابتدا به این موضوع میپردازیم که دیکشنری در پایتون چیست و پس از آن یک دیکشنری ساخته و کار با دیکشنری پایتون را خواهیم آموخت. همچنین در انتها در مورد نوع کلیدها و مقادیر بیشتر صحبت کرده و چند ترفند کاربردی را با هم مرور میکنیم.
دیکشنری (Dictionary) در زبان فارسی معادل فرهنگ لغت یا واژهنامه است. در یک کتاب فرهنگ لغت، یک کلمه با معادلش مرتبط میشود. این معادل میتواند یکی بوده یا چندین مورد باشد، اما کلمه اصلی یکی است! در اصل یک یا چند معنی معادل را به یک کلمه مرتبط کردهایم.
در دیکشنری پایتون هم دقیقاً مشابه چنین کاری را انجام میدهیم؛ یک کلمه (که آن را به عنوان کلید میشناسیم) با یک مقدار (string، عدد، رفرنس شئ و …) مرتبط خواهد شد.
معمولاً اعضای یک دیکشنری مواردی مرتبط با هم هستند و هر یک از اعضا یک خصیصه یا ویژگی از مورد اصلی را بیان میکنند. اما این مسئله تماماً وابسته به تعاریف و نوع برنامهنویسی شما به عنوان برنامهنویس خواهد بود و هیچ قاعده و قانون خاصی در مورد مرتبط بودن اعضای یک دیکشنری نداریم!
ساخت دیکشنری در پایتون
یک دیکشنری با علامت {
شروع شده و با }
خاتمه مییابد. اعضای کی دیکشنری به صورت کلید و مقدار (key value) در درون آن تعریف شده و مشابه سایر ساختارهای رایج ذخیرهسازی در پایتون، با استفاده از کاما (,
) از یکدیگر جدا میشوند.
برای مثال فرض کنید میخواهیم مشخصات فردی را درون یک دیکشنری داشته باشیم؛ دیکشنری را به صورت زیر تعریف میکنیم.
person = { "name": "hesam", "job": "graphist", "car": "BMW x6", "age": 24, "code": 134 }
به همین سادگی توانستیم یک دیکشنری حاوی اطلاعات فردی به نام hesam را ایجاد کنیم!
تعداد عناصر موجود در یک دیکشنری پایتون نامحدود است. ما میتوانیم یک دیکشنری با هزاران عنصر داشته یا فقط درون آن یک عنصر را نگهداری کنیم. فقط باید قوانین تعریف کلید و مقدار برای آنها رعایت شود. (که در انتهای مقاله در مورد آن بحث میکنیم.)
ساخت دیکشنری با سازنده dict
برای ایجاد دیکشنری میتوان از سازنده (Constructor) آن نیز استفاده کرد. به این منظور تابع dict()
را صدا زده و تمام کلیدها و مقادیر آنها را به صورت پارامترهای جداگانه به عنوان ورودی به تابع میدهیم.
person = dict( name="hesam", job="graphist", car="BMW x6", age=24, code=134 )
نتیجه ذخیره شده در متغیر person
نیز مشابه حالت قبل است. در حقیقت تفاوت خاصی در دیکشنری ایجاد شده در این دو حالت وجود ندارد. شما میتوانید با هر روشی که راحتتر هستید از آنها استفاده کنید.
البته همانطور که میدانید، گاهی اوقات شرایط برنامه و موقعیتهای پیش رو نحوه استفاده از آن را برای ما تعیین میکند.
کار با دیکشنری در پایتون
تا به این جای کار توانستیم یک دیکشنری در پایتون بسازیم. قطعاً لازم است بتوانیم با عناصر موجود در آن عملیاتهایی انجام داده تا برنامه خود را پیش ببریم. در ادامه روشهای کار با عناصر دیکشنری را میخوانیم.
دسترسی به مقادیر دیکشنری
برای دسترسی به مقادیر (عناصر) ذخیرهشده در دیکشنری، دو راه وجود دارد.
راه اول و سادهترین راهحل مشابه دسترسی به خانههای یک لیست در پایتون است. به این صورت که با استفاده از علامت []
میتوان به تک تک عناصر دسترسی داشت؛ با این تفاوت که به جای مقدار عددی برای اَندیس، از مقدار کلیدها به عنوان ایندکس استفاده خواهیم کرد.
اگر در دیکشنریای که ابتدای کار ساختیم بخواهیم به نام فرد دسترسی پیدا کنیم، به صورت زیر عمل خواهیم کرد.
print( "Name: " + person["name"] )
خروجی قطعه کد بالا چیزی شبیه زیر خواهد شد:
Name: hesam
راهکار دوم برای دسترسی به مقدار یک کلید در دیکشنری پایتون، استفاده از تابع get()
روی دیکشنری است. این تابع یک ورودی میگیرد که همان کلید مورد نظر ماست و سپس مقدار مرتبط با کلید را بازمیگرداند.
print( "Name: " + person.get("name") )
# output: Name: hesam
خطای KeyError در دیکشنری پایتون
اگر در هنگام فراخوانی یک مقدار از دیکشنری، کلیدی را صدا بزنیم که وجود نداشته باشد، با خطایی از نوع KeyError مواجه خواهیم شد.
info = {'name': 'omid', 'job': 'programmer', 'code': 177}
print( info['name'] )
print( info['family'] )
# omid
# KeyError: 'family'
تغییر مقادیر دیکشنری در پایتون
برای بهروزرسانی مقدار هر یک از کلیدها مشابه تخصیص مقدار به ایندکسهای مختلف یک لیست عمل میکنیم.
در قطعه کد زیر، مقدار 23 را در کلید age
از دیکشنری person
قرار دادهایم.
person["age"] = 23
همانطور که احتمالاً درست حدس زدهاید، میتوان برای بهروزرسانی مقدار یک کلید در دیکشنری از همان مقدار یا مقدارهای دیگر درون آن دیکشنری نیز استفاده کرد.
مثلاً در مثال زیر، سن فعلی کاربر را به اندازه یک واحد افزایش میدهیم.
person["age"] = person["age"] + 1
افزودن عنصر جدید به دیکشنری پایتون
افزودن عضو جدید به دیکشنری در پایتون بسیار آسان و ساده است. برای این کار، مشابه تغییر مقدار یک کلید در دیکشنری عمل میکنیم، با این تفاوت که کلید صدا زده شده، کلید جدید و مقداری که به آن تخصیص مییابد مقدار مورد نظرمان خواهد بود.
person["mobile"] = "Samsung Galaxy Note 7"
حذف عناصر از دیکشنری
برای حذف یک کلید و مقدار مرتبط با آن، دو روش خواهیم داشت.
روش اول استفاده از دستور del
است. در جلوی این دستور کلید مورد نظر در دیکشنری را فراخوانی میکنیم.
print( person )
del person["mobile"] # delete 'mobile' key in dictionary
print( person )
در خروجی قطعه کد بالا، در پرینت دوم میبینیم که کلید mobile و مقدار مربوط به آن از درون دیکشنری حذف شده است.
{'name': 'hesam', 'job': 'graphist', 'car': 'BMW x6', 'age': 24, 'code': 134, 'mobile': 'Samsung Galaxy Note 7'} {'name': 'hesam', 'job': 'graphist', 'car': 'BMW x6', 'age': 24, 'code': 134}
روش دوم برای حذف یک المان از دیکشنری استفاده از متد pop()
در دیکشنری پایتون است. این تابع به صورت متد روی دیکشنری مورد نظر صدا زده شده و یک ورودی میگیرد.
ورودی آن همان مقدار کلید مورد نظر ماست که میخواهیم از دیکشنری حذف کنیم.
person.pop("car")
حذف کل دیکشنری در پایتون
گاهی لازم است تا کل دیکشنری را حذف کنیم. منظور از کل دیکشنری، حذف تمام کلیدها و مقدارها و پس از آن حذف متغیر دیکشنری است.
برای این کار کافی است تا نام دیکشنری را در مقابل دستور del
بنویسیم. با این کار کل دیکشنری حذف خواهد شد.
del person # delete person dictionary object
حذف تمام عناصر دیکشنری
اما گاهی نیاز است که صرفاً دیکشنری را خالی کنیم؛ یعنی بدون حذف خود دیکشنری، فقط کلیدها و مقدارها را حذف کنیم. برای این کار متد clear()
را روی شیء دیکشنری صدا میزنیم.
با صدا زدن این تابع، تمام کلیدهای موجود در دیکشنری حذف شده و در نهایت یک دیکشنری خالی خواهیم داشت.
person.clear() # delete all keys in Dictionary
print( person )
# output: {}
قوانین تعریف کلید و مقدار در دیکشنری پایتون
کلیدهای دیکشنری در پایتون باید دو ویژگی اصلی داشته باشند.
- یکتا باشند (تکراری نباشند)
- تغییرناپذیر باشند.
مورد اول که تقریباً واضح است. در حقیقت به ازای هر کلید در دیکشنری نمیتوان بیشتر از یک مقدار داشت. در صورتی که یک کلید دو بار در دیکشنری تعریف شود، مقدار دوم آن جایگزین اولی شده و همواره مقدار دوم را خواهیم داشت. (به نوعی تغییر مقدار صورت میگیرد)
در مورد دومین قانون، کلید را به عبارتی هویت مقدار (value) مرتبط با آن میدانند. میدانیم که هویت را نمیتوان تغییر داد. بنابراین کلیدها در دیکشنری پایتون میبایست یک مقدار تغییرناپذیر باشند. در نتیجه نمیتوان از یک متغیر به عنوان کلید استفاده کرد.
برای مقادیر متناظر با کلیدها در دیکشنری هیچ گونه محدودیتی نداریم. این مقادیر میتوانند تکراری بوده یا از هر نوع دادهای مختلفی (نظیر رشته متنی پایتون، عدد، شیء پایتون، شئ تعریف شده توسط کاربر و …) باشند؛ در نتیجه میتوانند تغییرپذیر نیز باشند.
کپی کردن دیکشنری در پایتون
همانطور که میدانید، متغیرهایی که به اشیاء اشاره میکنند حاوی رفرنسی به آن شئ هستند. پس اگر یک دیکشنری را با استفاده از علامت تخصیص (=
) به متغیر دیگری بدهیم، دیکشنری کپی نمیشود؛ بلکه فقط رفرنس آن، درون متغیر دوم ریخته خواهد شد. در نتیجه با تغییر دیکشنری اول، دیکشنری دوم ما نیز تغییر میکند.
person_backup = person # not a true way to copy dictionary
برای کپی کردن دیکشنری در پایتون میتوان از متد copy()
روی شیء دیکشنری استفاده کرد.
person_backup = person.copy()
حالا اگر دیکشنری person
یا person_backup
را تغییر دهیم، محتوای دیکشنری دیگر هیچ تغییری نخواهد کرد.
برای دیدن تمام متدهای دیکشنری پایتون میتوانید به جدول انتهای این صفحه انگلیسی مراجعه کنید.
جمعبندی: دیکشنری در پایتون چیست ؟
دیکشنری در پایتون نوعی لیست انجمنی یا کلید-مقدار است. اگر با لیستها در پایتون آشنایی داشته باشید، میدانید که در لیست برای دسترسی به هر عنصر از اندیس استفاده میکنیم. در دیکشنری اندیس (یا همان کلید) هر مقدار (value) را خودمان تعریف خواهیم کرد.
در این مقاله با نحوه ساخت دیکشنری در پایتون، قواعد مختلف و روشهای کار با آن را آموختیم. دیدیم که میتوان به سادگی از دیکشنریها استفاده کرد. دیکشنریها یکی از محبوبترین و پرکاربردترین ساختمانهای داده در پایتون است که میتوان از آن در قسمتهای مختلف برنامه خود استفاده کرد.
به نظر شما چه ترفندهایی در کار با دیکشنری پایتون کاربردی است که به آن اشارهای نشده؟ این ترفند را از بخش دیدگاهها با دوستانتان به اشتراک بگذارید. اگر سؤالی دارید، باز هم بخش دیدگاهها برای شماست!