دیکشنری در پایتون — آموزش از صفر تا صد + کد و مثال
دیکشنری در پایتون به عنوان یکی از پرکاربردترین انواع «ساختار داده» (Data Structure) محسوب میشود که برنامهنویسان تازهکار در ابتدای مسیر یادگیری این زبان باید با آن آشنا شوند. به دلیل ویژگیهای مهم و منحصربفرد دیکشنری پایتون، در اغلب پروژههای برنامه نویسی از آن به منظور نگهداری دادهها استفاده میشود و در بسیاری از اوقات، برنامه نویسان از روشهای مختلفی برای تبدیل لیست به دیکشنری در پایتون استفاده میکنند تا از ویژگیهای این ساختار داده بهرهمند شوند. در مطلب حاضر، پس از توضیح مختصری پیرامون مفهوم ساختار داده در برنامه نویسی و بهخصوص در زبان پایتون، به شرح ویژگیهای دیکشنری در این زبان و نحوه ساخت آن پرداخته میشود. همچنین، شیوه کار با این نوع ساختار داده و متدها و توابع آن نیز به همراه مثال مورد بررسی قرار میگیرند.
ساختار داده چیست ؟
ساختار داده یا همان ساختمان داده یکی از مفاهیم اصلی و مهم در برنامه نویسی است که افراد علاقهمند به یادگیری این حوزه، در ابتدای مسیر آموزش خود با آن آشنا میشوند. از ساختار داده در برنامه نویسی میتوان به منظور ذخیرهسازی و سازماندهی دادهها استفاده کرد. هر ساختار داده در زبانهای برنامه نویسی، روشی خاص و منحصربهفردی را برای ذخیره کردن داده و دسترسی به آنها فراهم میکند.
در زبان برنامه نویسی پایتون، چهار نوع ساختار داده با نامهای «لیست» (List)، «تاپل» (Tuple)، «مجموعه» (Set) و «دیکشنری» (Dictionary) وجود دارد. در پروژههای برنامه نویسی، بنا به نیاز برنامه نویس و با توجه به ویژگیهای مختلف هر یک از این ساختارهای داده، برخی از آنها مورد استفاده قرار میگیرند. به عنوان مثال، لیستها، قابلیت ذخیرهسازی دادهها را به ترتیب خاص فراهم میکنند و میتوان با استفاده از اندیس به دادههای لیست دسترسی داشت. تاپلها نیز برای ذخیره مقادیری با طول مشخص استفاده میشوند و پس از تعریف تاپل، دیگر نمیتوان به آیتمهای آن اضافه کرد. از مجموعه نیز به منظور ذخیرهسازی دادههای غیرتکراری استفاده میشود.
در بین این ساختارهای داده، دیکشنری پایتون مشابه «هشمپ» (HashMap)، «جدول جستجو» (Lookup Table) و «آرایه پیوندی» (Associative Array) در سایر زبانهای برنامه نویسی است که امکان ذخیرهسازی آیتمها را به صورت جفت «کلید-مقدار» (Key-Value) فراهم میکند. در ادامه، به توضیح بیشتری پیرامون ساختار دیکشنری در پایتون پرداخته شده است.
دیکشنری در پایتون چیست ؟
دیکشنری در پایتون یکی از ساختارهای داده مهم و پرکاربرد به حساب میآید. این ساختار داده مشابه ساختارهای داده در سایر زبانهای برنامه نویسی است که از آنها برای نگاشت «کلید» (Key) به «مقدار» (Value) استفاده میشود. همچنین، دیکشنری پایتون را میتوان با کلاس «هشمپ» (HashMap) در جاوا مقایسه کرد. به عبارتی، عملکرد هشمپ در جاوا مشابه دیکشنری در پایتون است؛ هر دوی آنها از «جدول هش» (HashTable) به منظور نگاشت کلیدها به مقادیرشان استفاده میکنند. به بیان دیگر، میتوان دیکشنری در پایتون را به عنوان «آرایه پیوندی» (Associative Array) تلقی کرد که با استفاده از جدول هش میتواند جفت آیتمهای کلید-مقدار را در حافظه ذخیره کند و با استفاده از کلید، به مقدار آن دسترسی داشته باشد.
ساختار داده دیکشنری پایتون در نخستین نسخه پایتون (نسخه 0.9.0) در سال 1991 ارائه شد و به نوعی، جزء اولین ساختارهای داده در پایتون محسوب میشد که بر پایه جدول هش کار میکرد. با بهکارگیری این ساختار داده میتوان عملیاتی نظیر جستجوی مقدار، اضافه کردن آیتم جدید، ویرایش مقادیر کلیدها و حذف مقداری خاص با استفاده از کلید را انجام داد.
میتوان به منظور درک بهتر دیکشنری در پایتون، از مثال ملموسی در دنیای واقعی استفاده کرد. دفترچه تلفن میتواند نمونه خوبی برای فهم دیکشنری پایتون باشد. در دفترچه تلفن، اطلاعات بر اساس نام اشخاص و شماره تماس آنها سازماندهی شده است.
نام اشخاص را میتوان به عنوان کلیدهای دیکشنری و شماره تماس افراد را میتوان به عنوان مقادیر دیکشنری در پایتون در نظر گرفت. زمانی که لازم است به شماره تماس فردی دسترسی داشته باشیم، نیازی نیست از ابتدا تا انتهای دفترچه تلفن به دنبال نام فرد بگردیم؛ بلکه کافی است مستقیماً در بخش خاصی از دفترچه به دنبال نام فرد مورد نظر باشیم. دیکشنری در پایتون نیز همانند دفترچه تلفن یا فرهنگ لغات، قابلیت جستجوی سریع اطلاعات را در اختیار برنامه نویس قرار میدهد و پیچیدگی زمانی یا همان مرتبه اجرایی آن برابر با است که همین امر به عنوان یکی از مهمترین مزیتهای این نوع ساختار داده در پایتون محسوب میشود.
ویژگی های دیکشنری در پایتون چیست ؟
ساختار داده دیکشنری در پایتون ویژگیهای منحصربفردی برای ذخیره کردن دادهها، سازماندهی و دسترسی به آنها دارد که در ادامه فهرستی از آنها ارائه شده است:
- دیکشنری در پایتون برخلاف ساختار داده لیست، از ترتیب خاصی برای ذخیره کردن دادهها استفاده نمیکند.
- با استفاده از کلیدهای دیکشنری، میتوان مقادیر آنها را بازیابی کرد.
- برای تعریف کلیدها میتوان از اعداد صحیح و اعشاری، رشته و ساختار داده تاپل استفاده کرد.
- برای تعریف کلیدها در پایتون از ساختار داده دیکشنری و لیست استفاده نمیشود.
- کلیدهای دیکشنری پایتون باید منحصربفرد باشند. بنابراین، از عبارتهای تکراری نمیتوان برای ساخت کلیدها استفاده کرد.
- آیتمهای تکراری را میتوان برای مقادیر کلیدهای دیکشنری در پایتون به کار برد.
- مقادیر کلیدها میتوانند از هر نوع داده و ساختار دادهای تعریف شوند.
- یکی از ویژگیهای دیکشنری در پایتون، «قابل تغییر بودن» (Mutable) آن است؛ به عبارتی، پس از تعریف و مقداردهی اولیه آن، میتوان در طول برنامه، علاوهبر درج آیتم جدیدی به آن، مقداری را بهروزرسانی یا حذف کرد.
- دیکشنری در پایتون امکان ساخت دیکشنریهای تو در تو را فراهم میکند.
- در زبان پایتون میتوان ساختارهای داده را به یکدیگر تبدیل کرد. به عبارتی، هر یک از ساختارهای داده در پایتون، ویژگیهای خاصی دارند که برنامهنویسان بر حسب نیاز خود میتوانند اطلاعات خود را از یک ساختار داده به ساختار داده دیگری منتقل کنند. ساختار داده دیکشنری نیز از این قاعده مستثنی نیست. به عنوان مثال، روشهای مختلفی برای تبدیل دیکشنری به لیست و لیست به دیکشنری وجود دارند که میتوان بهسادگی از آنها بهره برد.
در ادامه مطلب، با ارائه مثال به نحوه ساخت دیکشنری در پایتون پرداخته میشود.
روش ها و نحوه ساخت دیکشنری در پایتون
به منظور ایجاد دیکشنری میتوان از چندین روش مختلف استفاده کرد که در ادامه، فهرستی از آنها ارائه شده است:
- استفاده از علامت آکولاد ({} )
- تابع dict()
- استفاده از تابعdict()و تابعzip()
- متدfromkeys()از تابعdict()
- روش Dictionary Comprehension
در ادامه مطلب حاضر، با ارائه مثال به توضیح هر یک از روشهای فوق برای ساخت دیکشنری در پایتون پرداخته میشود.
علامت آکولاد برای ساخت دیکشنری
برای تعریف دیکشنری در پایتون از علامت آکولاد ({} ) و برای نگاشت کلیدها به مقادیر از علامت دو نقطه (:) استفاده میشود. در ادامه، «قاعده نحوی» (سینتکس) پایتون برای ایجاد دیکشنری ارائه شده است.
1d = {
2 <key>: <value>,
3 <key>: <value>,
4 .
5 .
6 .
7 <key>: <value>
8}
در قطعه کد زیر، مثالی از پایتون ارائه شده است که نحوه ساخت دیکشنریMLB_teamرا نشان میدهد.
1MLB_team = {
2 'Colorado' : 'Rockies',
3 'Boston' : 'Red Sox',
4 'Minnesota': 'Twins',
5 'Milwaukee': 'Brewers',
6 'Seattle' : 'Mariners'
7 }
ساخت دیکشنری با تابع Dict()
از تابعdict()میتوان برای ساخت دیکشنری در پایتون استفاده کرد. پارامترهای این تابع، مجموعهای از جفت آیتمهای کلید-مقدار هستند. میتوان این آیتمها را در قالب لیستی از تاپلها به عنوان پارامتر تابعdict()تعریف کرد. قاعده نحوی این تابع در ادامه ملاحظه میشود.
1d = dict([
2 (<key>, <value>),
3 (<key>, <value),
4 .
5 .
6 .
7 (<key>, <value>)
8])
در قطعه کد زیر، مثالی از تعریف دیکشنریMLB_teamبا استفاده از تابعdict()ارائه شده است.
1MLB_team = dict([
2 ('Colorado', 'Rockies'),
3 ('Boston', 'Red Sox'),
4 ('Minnesota', 'Twins'),
5 ('Milwaukee', 'Brewers'),
6 ('Seattle', 'Mariners')
7 ])
همچنین، چنانچه مقادیر کلیدهای دیکشنری، از نوع رشته باشند، میتوان با استفاده از تابعdict()بهصورت زیر، دیکشنری را در پایتون تعریف کرد.
1MLB_team = dict(
2 Colorado='Rockies',
3 Boston='Red Sox',
4 Minnesota='Twins',
5 Milwaukee='Brewers',
6 Seattle='Mariners'
7)
ساخت دیکشنری با تابع Dict() و Zip()
به منظور ساخت دیکشنری در پایتون میتوان از دو لیست مجزا برای مشخص کردن کلیدها و مقادیر آنها استفاده کرد. سپس با استفاده از توابعdict()وzip()میتوان از این دو لیست به سادگی، دیکشنری جدیدی ساخت. در قطعه کد زیر، مثالی از کاربرد این دو تابع برای تعریف دیکشنری در پایتون ارائه شده است.
1# Lists to represent keys and values
2keys = ['a','b','c','d','e']
3values = [1,2,3,4,5]
4
5myDict = dict(zip(keys, values))
6
7print(myDict)
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
استفاده از متد Dict.fromkeys() برای ساخت دیکشنری در پایتون
زمانی که لازم باشد یک دیکشنری با کلیدهایی ساخته شود که این کلیدها دارای مقادیر یکسان باشند، میتوان از متدfromkeys()استفاده کرد. با استفاده از تابعdict()میتوان به این متد دسترسی داشت. در قطعه کد زیر، مثالی از نحوه کاربرد این متد برای ساخت دیکشنری در پایتون ارائه شده است.
1dic=dict.fromkeys(range(5), True)
2
3print(dic)
طبق قطعه کد فوق، دیکشنری جدیدی با عنوانdicساخته میشود که دارای پنج آیتم با مقادیر یکسانTrueاست. خروجی این قطعه کد در ادامه ملاحظه میشود.
{0: True, 1: True, 2: True, 3: True, 4: True}
ممنون از سایت خوبتون، میخواستم بدونم چجوری میتونم مقدار key و value رو از کاربر با کمک input دریافت کنم و داخل یک حلقه بگم که دیکشنریم ساخته بشه؟ هر کدی میزنم به خطا میخوره