دیکشنری در پایتون — آموزش از صفر تا صد + کد و مثال

۱۸۸۸۸ بازدید
آخرین به‌روزرسانی: ۰۶ تیر ۱۴۰۳
زمان مطالعه: ۱۶ دقیقه
دیکشنری در پایتون — آموزش از صفر تا صد + کد و مثال

دیکشنری در پایتون به عنوان یکی از پرکاربردترین انواع «ساختار داده» (Data Structure) محسوب می‌شود که برنامه‌نویسان تازه‌کار در ابتدای مسیر یادگیری این زبان باید با آن آشنا شوند. به دلیل ویژگی‌های مهم و منحصربفرد دیکشنری پایتون، در اغلب پروژه‌های برنامه نویسی از آن به منظور نگهداری داده‌ها استفاده می‌شود و در بسیاری از اوقات، برنامه نویسان از روش‌های مختلفی برای تبدیل لیست به دیکشنری در پایتون استفاده می‌کنند تا از ویژگی‌های این ساختار داده بهره‌مند شوند. در مطلب حاضر، پس از توضیح مختصری پیرامون مفهوم ساختار داده در برنامه نویسی و به‌خصوص در زبان پایتون، به شرح ویژگی‌های دیکشنری در این زبان و نحوه ساخت آن پرداخته می‌شود. همچنین، شیوه کار با این نوع ساختار داده و متدها و توابع آن نیز به همراه مثال مورد بررسی قرار می‌گیرند.

فهرست مطالب این نوشته
997696

ساختار داده چیست ؟

ساختار داده یا همان ساختمان داده یکی از مفاهیم اصلی و مهم در برنامه نویسی است که افراد علاقه‌مند به یادگیری این حوزه، در ابتدای مسیر آموزش خود با آن آشنا می‌شوند. از ساختار داده در برنامه نویسی می‌توان به منظور ذخیره‌سازی و سازمان‌دهی داده‌ها استفاده کرد. هر ساختار داده در زبان‌های برنامه نویسی، روشی خاص و منحصربه‌فردی را برای ذخیره کردن داده و دسترسی به آن‌ها فراهم می‌کند.

در زبان برنامه نویسی پایتون، چهار نوع ساختار داده با نام‌های «لیست» (List)، «تاپل» (Tuple)، «مجموعه» (Set) و «دیکشنری» (Dictionary) وجود دارد. در پروژه‌های برنامه نویسی، بنا به نیاز برنامه نویس و با توجه به ویژگی‌های مختلف هر یک از این ساختارهای داده، برخی از آن‌ها مورد استفاده قرار می‌گیرند. به عنوان مثال، لیست‌ها، قابلیت ذخیره‌سازی داده‌ها را به ترتیب خاص فراهم می‌کنند و می‌توان با استفاده از اندیس به داده‌های لیست دسترسی داشت. تاپل‌ها نیز برای ذخیره مقادیری با طول مشخص استفاده می‌شوند و پس از تعریف تاپل، دیگر نمی‌توان به آیتم‌های آن اضافه کرد. از مجموعه نیز به منظور ذخیره‌سازی داده‌های غیرتکراری استفاده می‌شود.

ساختارهای داده در زبان پایتون
انواع ساختارهای داده در زبان برنامه نویسی پایتون

در بین این ساختارهای داده، دیکشنری پایتون مشابه «هش‌مپ» (HashMap)، «جدول جستجو» (Lookup Table) و «آرایه پیوندی» (Associative Array) در سایر زبان‌های برنامه نویسی است که امکان ذخیره‌سازی آیتم‌ها را به صورت جفت «کلید-مقدار» (Key-Value) فراهم می‌کند. در ادامه، به توضیح بیشتری پیرامون ساختار دیکشنری در پایتون پرداخته شده است.

دیکشنری در پایتون چیست ؟

دیکشنری در پایتون یکی از ساختارهای داده‌ مهم و پرکاربرد به حساب می‌آید. این ساختار داده مشابه ساختارهای داده در سایر زبان‌های برنامه نویسی است که از آن‌ها برای نگاشت «کلید» (Key) به «مقدار» (Value) استفاده می‌شود. همچنین، دیکشنری پایتون را می‌توان با کلاس «هش‌مپ» (HashMap) در جاوا مقایسه کرد. به عبارتی، عملکرد هش‌مپ در جاوا مشابه دیکشنری در پایتون است؛ هر دوی آن‌ها از «جدول هش» (HashTable) به منظور نگاشت کلیدها به مقادیرشان استفاده می‌کنند. به بیان دیگر، می‌توان دیکشنری در پایتون را به عنوان «آرایه پیوندی» (Associative Array) تلقی کرد که با استفاده از جدول هش می‌تواند جفت آیتم‌های کلید-مقدار را در حافظه ذخیره کند و با استفاده از کلید، به مقدار آن دسترسی داشته باشد.

ساختار داده دیکشنری پایتون در نخستین نسخه‌ پایتون (نسخه 0.9.0) در سال 1991 ارائه شد و به نوعی، جزء اولین ساختارهای داده در پایتون محسوب می‌شد که بر پایه جدول هش کار می‌کرد. با به‌کارگیری این ساختار داده می‌توان عملیاتی نظیر جستجوی مقدار، اضافه کردن آیتم جدید، ویرایش مقادیر کلیدها و حذف مقداری خاص با استفاده از کلید را انجام داد.

می‌توان به منظور درک بهتر دیکشنری در پایتون، از مثال ملموسی در دنیای واقعی استفاده کرد. دفترچه تلفن می‌تواند نمونه خوبی برای فهم دیکشنری پایتون باشد. در دفترچه تلفن، اطلاعات بر اساس نام اشخاص و شماره تماس آن‌ها سازمان‌دهی شده است.

شخصی در حال یادگیری پایتون است

نام اشخاص را می‌توان به عنوان کلیدهای دیکشنری و شماره تماس افراد را می‌توان به عنوان مقادیر دیکشنری در پایتون در نظر گرفت. زمانی که لازم است به شماره تماس فردی دسترسی داشته باشیم، نیازی نیست از ابتدا تا انتهای دفترچه تلفن به دنبال نام فرد بگردیم؛ بلکه کافی است مستقیماً در بخش خاصی از دفترچه به دنبال نام فرد مورد نظر باشیم. دیکشنری در پایتون نیز همانند دفترچه تلفن یا فرهنگ لغات، قابلیت جستجوی سریع اطلاعات را در اختیار برنامه نویس قرار می‌دهد و پیچیدگی زمانی یا همان مرتبه اجرایی آن برابر با O(1)O(1)‎ است که همین امر به عنوان یکی از مهم‌ترین مزیت‌های این نوع ساختار داده در پایتون محسوب می‌شود.

ویژگی های دیکشنری در پایتون چیست ؟

ساختار داده دیکشنری در پایتون ویژگی‌های منحصربفردی برای ذخیره کردن داده‌ها، سازمان‌دهی و دسترسی به آن‌ها دارد که در ادامه فهرستی از آن‌ها ارائه شده است:

  • دیکشنری در پایتون برخلاف ساختار داده لیست، از ترتیب خاصی برای ذخیره کردن داده‌ها استفاده نمی‌کند.
  • با استفاده از کلیدهای دیکشنری، می‌توان مقادیر آن‌ها را بازیابی کرد.
  • برای تعریف کلیدها می‌توان از اعداد صحیح و اعشاری، رشته‌ و ساختار داده تاپل استفاده کرد.
  • برای تعریف کلیدها در پایتون از ساختار داده دیکشنری و لیست استفاده نمی‌شود.
  • کلیدهای دیکشنری پایتون باید منحصربفرد باشند. بنابراین، از عبارت‌های تکراری نمی‌توان برای ساخت کلیدها استفاده کرد.
  • آیتم‌های تکراری را می‌توان برای مقادیر کلیدهای دیکشنری در پایتون به کار برد.
  • مقادیر کلیدها می‌توانند از هر نوع داده و ساختار داده‌ای تعریف شوند.
  • یکی از ویژگی‌های دیکشنری در پایتون، «قابل تغییر بودن» (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}

ساخت دیکشنری در پایتون با Dictionary Comprehension

چنانچه دو لیست مجزا برای کلیدها و مقادیر آن‌ها وجود داشته باشند و نیاز باشد از این دو لیست به منظور ساخت دیکشنری در پایتون استفاده شود، می‌توان از روش Dictionary Comprehension استفاده کرد. در این روش، می‌توان با استفاده از حلقهforو تابعzip()، به‌طور همزمان از هر دو لیست، آیتم‌ها را خواند و در دیکشنری ذخیره کرد. روش کدنویسی مفهومی (Comprehension) فقط مختص به دیکشنری در پایتون نمی‌شود و به منظور ایجاد و مدیریت دیگر ساختارهای داده هم می‌توان از آن استفاده کرد. مثلاً پیش از این در رابطه با «لیست‌های مفهومی» (List Comprehension) مطلب مجزایی در مجله فرادرس منتشر شده است.

 

در قطعه کد زیر، مثالی از نحوه کاربرد روش Dictionary Comprehension به منظور ایجاد دیکشنری در پایتون ارائه شده است.

1# Python code to demonstrate dictionary
2# comprehension
3 
4# Lists to represent keys and values
5keys = ['a','b','c','d','e']
6values = [1,2,3,4,5] 
7 
8# but this line shows dict comprehension here 
9myDict = { k:v for (k,v) in zip(keys, values)} 
10
11print (myDict)

خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

معرفی فیلم های آموزش پایتون

فیلم های آموزش پایتون فرادرس

افراد علاقه‌مند به یادگیری برنامه نویسی پایتون می‌توانند از مجموعه دوره‌های جامع آموزش پایتون در پلتفرم فرادرس استفاده کنند. سایت فرادرس مجموعه‌ای آموزشی را برای آن دسته از افرادی فراهم کرده است که قصد یادگیری پایتون را دارند. دوره‌های گردآوری شده در مجموعه آموزش پایتون، فیلم‌های آموزشی مقدماتی تا پیشرفته و پروژه‌محور زبان پایتون را شامل می‌شوند. افراد می‌توانند از دوره‌های جامع پایتون در راستای تقویت مهارت برنامه نویسی خود استفاده کنند و از آموزش‌های پروژه‌محور فرادرس بهره بگیرند. در تصویر فوق تنها برخی از دوره‌های مجموعه آموزش پایتون فرادرس مشاهده می‌شوند.

دسترسی به مقادیر دیکشنری در پایتون

پس از ذخیره آیتم‌های کلید-مقدار در دیکشنری پایتون، می‌توان با استفاده از کلید‌ها، به مقادیرشان دسترسی داشت. دو روش برای دسترسی به مقادیر کلیدهای دیکشنری پایتون وجود دارد که در ادامه ملاحظه می‌شوند:

  • استفاده از کلیدهای دیکشنری
  • استفاده از متدgetدیکشنری

در ادامه، با ارائه مثال به توضیح هر یک از روش‌های فوق پرداخته می‌شود.

استفاده از نام کلید برای دسترسی به مقادیر دیکشنری

برخلاف سایر ساختارهای داده در پایتون نظیر لیست، به منظور دسترسی به مقدار خاصی در دیکشنری پایتون از کلید به جای اندیس استفاده می‌شود. بدین منظور، نام کلید در داخل علامت براکت ([]) نوشته می‌شود تا بتوان مقدار متناظر آن کلید را در خروجی بازگرداند. در قطعه کد زیر، مثالی از نحوه دسترسی به مقدار مربوط به کلیدMinnesotaاز دیکشنریMLB_teamارائه شده است. چنانچه کلید فراخوانده شده، جزء کلیدهای دیکشنری نباشد، خطای کامپایلر رخ می‌دهد.

1MLB_team = dict([
2    ('Colorado', 'Rockies'),
3    ('Boston', 'Red Sox'),
4    ('Minnesota', 'Twins'),
5    ('Milwaukee', 'Brewers'),
6    ('Seattle', 'Mariners')
7])
8
9MLB_team['Minnesota']

خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

'Twins'
کلید در دیکشنری پایتون

استفاده از متد Get برای دسترسی به مقادیر دیکشنری

از متدgetنیز به منظور بازگرداندن مقدار کلید مورد نظر استفاده می‌شود. این متد داری دو پارامتر است. اولین پارامتر، نام کلیدی را مشخص می‌کند که مقدار آن باید در خروجی بازگردانده شود. دومین پارامتر متدget، مقدار پیش‌فرضی است که می‌توان برای کلید در نظر گرفت. به عبارتی، چنانچه کلید مورد نظر در دیکشنری یافت نشد، کامپایلر به جای خطا، مقدار تعیین شده برای پارامتر دوم این متد را برمی‌گرداند. به‌طور پیش‌فرض، مقدار این پارامتر برابر باNoneاست. در قطعه کد زیر، مثالی از نحوه کاربرد این متد در دیکشنری پایتون ارائه شده است.

1d = {'a': 10, 'b': 20, 'c': 30}
2
3print(d.get('b'))
4
5print(d.get('z'))
6
7print(d.get('z', -1))

خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

20
None
-1

در ادامه مطلب حاضر، به نحوه ویرایش ساختار داده دیکشنری و حذف آیتم‌های آن در زبان پایتون پرداخته می‌شود.

ویرایش دیکشنری در پایتون

به منظور ویرایش مقادیر دیکشنری، می‌توان با تخصیص مقادیر جدید به کلیدهایی که از قبل در دیکشنری وجود داشته‌اند، مقادیر آن‌ها را تغییر داد. در قطعه کد زیر، مثالی از ویرایش مقدار مربوط به کلیدSeattleاز دیکشنریMLB_teamارائه شده است.

1MLB_team = dict([
2    ('Colorado', 'Rockies'),
3    ('Boston', 'Red Sox'),
4    ('Minnesota', 'Twins'),
5    ('Milwaukee', 'Brewers'),
6    ('Seattle', 'Mariners')
7])
8
9MLB_team['Seattle'] = 'Seahawks'
10print(MLB_team)

خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

{'Colorado': 'Rockies', 'Boston': 'Red Sox', 'Minnesota': 'Twins',
'Milwaukee': 'Brewers', 'Seattle': 'Seahawks', 'Kansas City': 'Royals'}

حذف مقادیر از دیکشنری در پایتون

چنانچه نیازی به آیتمی خاص در دیکشنری پایتون نباشد، می‌توان جفت کلید-مقدار را با دستورdelاز دیکشنری حذف کرد. در قطعه کد زیر، مثالی از نحوه حذف کلیدSeattleو مقدار آن از دیکشنریMLB_teamارائه شده است.

1MLB_team = dict([
2    ('Colorado', 'Rockies'),
3    ('Boston', 'Red Sox'),
4    ('Minnesota', 'Twins'),
5    ('Milwaukee', 'Brewers'),
6    ('Seattle', 'Mariners')
7])
8
9del MLB_team['Seattle']
10print(MLB_team)

خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

{'Colorado': 'Rockies', 'Boston': 'Red Sox', 'Minnesota': 'Twins',
'Milwaukee': 'Brewers', 'Kansas City': 'Royals'}

محدودیت های کلیدها در دیکشنری پایتون

به منظور تعریف کلیدهای دیکشنری، می‌توان از هر نوع رشته‌، اعداد صحیح، اعداد اعشاری و مقادیر True و False استفاده کرد. با این حال، برای انتخاب عبارتی خاص به عنوان کلید دیکشنری در پایتون، باید مد نظر داشت که از کلید تکراری استفاده نشود. دیکشنری، هر کلید منحصربفردی را به مقداری مشخص، نگاشت می‌کند. مقادیر کلیدها می‌توانند تکراری باشند و هیچ محدودیتی برای نوع مقادیر وجود ندارد.

چنانچه برای اضافه کردن آیتم جدید به دیکشنری در پایتون، از کلید تکراری استفاده شود، مقدار جدید، جایگزین مقدار قبلی در دیکشنری می‌شود. در ادامه، مثالی از پایتون ارائه شده است که این حالت را نشان می‌دهد.

1MLB_team = {
2    'Colorado' : 'Rockies',
3    'Boston'   : 'Red Sox',
4    'Minnesota': 'Twins',
5    'Milwaukee': 'Brewers',
6    'Seattle'  : 'Mariners'
7}
8
9MLB_team['Minnesota'] = 'Timberwolves'
10print(MLB_team)

در مثال فوق، دیکشنریMLB_teamدارای کلیدی با نامMinnesotaو مقدار متناظرTwinsاست. با دستورMLB_team['Minnesota'] ='Timberwolves'، به جای اینکه دو کلید با نام یکسانMinnesotaبا مقادیرTwinsوTimberwolvesدر دیکشنریMLB_teamایجاد شوند، مقدارMLB_team['Minnesota']='Timberwolvesجایگزین مقدارTwinsدر دیکشنری می‌شود. خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

{'Colorado': 'Rockies', 'Boston': 'Red Sox', 'Minnesota': 'Timberwolves',
'Milwaukee': 'Brewers', 'Seattle': 'Mariners'}

محدودیت دیگری که پایتون برای تعریف کلیدها اعمال می‌کند این است که نمی‌توان از ساختارهای داده‌ای نظیر لیست و دیکشنری استفاده کرد که پس از تعریف اولیه‌شان، قابل ویرایش هستند. به بیان دقیق‌تر، عبارتی که برای کلید تعریف می‌شود، باید غیرقابل تغییر باشد. بدین‌ترتیب، فقط می‌توان از رشته‌ها، اعداد صحیح و اعشاری و همچنین از ساختار داده تاپل برای ساخت کلیدها استفاده کرد. در قطعه کد زیر، مثالی از نحوه تعریف کلید‌ها با استفاده از ساختار داده تاپل ارائه شده است.

1d = {(1, 1): 'a', (1, 2): 'b', (2, 1): 'c', (2, 2): 'd'}
2print(d[(1,1)])
3print(d[(2,1)])

خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

'a'
'c'

در زیر، مثالی از تعریف کلید با استفاده از ساختار داده لیست ارائه شده است.

1d = {[1, 1]: 'a', [1, 2]: 'b', [2, 1]: 'c', [2, 2]: 'd'}
2
3print(d)

بر اساس محدودیت اعمال شده توسط پایتون، با اجرای قطعه کد فوق، خطای کامپایلر رخ می‌دهد:

Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    d = {[1, 1]: 'a', [1, 2]: 'b', [2, 1]: 'c', [2, 2]: 'd'}
TypeError: unhashable type: 'list'

خطای unhashable type مربوط به «تابع هش» (Hash Function) دیکشنری در پایتون است. دیکشنری، کلیدها را به «تابع هش» (Hash Function) ارسال می‌کند. این تابع، صرفاً داده‌هایی را می‌پذیرد که طول ثابتی داشته باشند تا بتواند آن‌ها را به مقدار ثابتی با نام «مقدار هش» (Hash Value) تبدیل کند و عمل جستجو در دیکشنری را با استفاده از این مقادیر انجام دهد.

محدودیت های کلید در دیکشنری پایتون

از آنجا که طول ساختار داده لیست در پایتون ثابت نیست و می‌توان پس از تعریف اولیه لیست، به آیتم‌های آن اضافه کرد یا با عمل حذف، تعداد آیتم‌های آن را کاهش داد، از آن نمی‌توان به عنوان کلید دیکشنری در پایتون استفاده کرد.

توابع و متدهای دیکشنری در پایتون

ساختار داده دیکشنری در پایتون دارای توابع و متدهای مختلفی برای انجام عملیات متفاوت است که در ادامه فهرستی از آن‌ها ملاحظه می‌شود:

  • توابع
    • cmp
    • len
  • متدها
    • clear
    • items
    • keys
    • values
    • pop
    • popitem
    • update
    • copy
    • setdefault

در ادامه مطلب حاضر، به توضیح هر یک از توابع و متدهای ذکر شده در فوق به همراه مثال پرداخته می‌شود.

تابع Cmp دیکشنری

از تابع cmpبه منظور مقایسه دو دیکشنری در پایتون استفاده می‌شود. چنانچه کلیه آیتم‌های دیکشنری که شامل جفت کلید-مقدار هستند، با یکدیگر برابر باشند، خروجی این تابع برابر با عدد صفر است. اگر مقادیر دیکشنری اول بزرگ‌تر از مقادیر دیکشنری دوم باشد، مقدار یک و اگر مقادیر دیکشنری اول کوچک‌تر از مقادیر دیکشنری دوم باشد، مقدار 1- در خروجی برگردانده می‌شود. در ادامه، مثالی از نحوه کاربرد این تابع در پایتون ارائه شده است.

1dict1 = {'Name': 'Zara', 'Age': 7};
2dict2 = {'Name': 'Mahnaz', 'Age': 27};
3dict3 = {'Name': 'Abid', 'Age': 27};
4dict4 = {'Name': 'Zara', 'Age': 7};
5print "Return Value : %d" %  cmp (dict1, dict2)
6print "Return Value : %d" %  cmp (dict2, dict3)
7print "Return Value : %d" %  cmp (dict1, dict4)

خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

Return Value : -1
Return Value : 1
Return Value : 0

تابع Len دیکشنری

با استفاده از تابع lenمی‌توان تعداد آیتم‌های ذخیره شده در دیکشنری را در خروجی برگرداند. در قطعه کد زیر، مثالی از نحوه کاربرد این تابع در پایتون ارائه شده است.

1dict = {'Name': 'Zara', 'Age': 7};
2print "Length : %d" % len (dict)

خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

Length : 2

متد Clear دیکشنری

از متد clearبرای پاک کردن تمامی آیتم‌های دیکشنری در پایتون استفاده می‌شود. در قطعه کد زیر، مثالی از نحوه کاربرد این تابع ارائه شده است.

1d = {'a': 10, 'b': 20, 'c': 30}
2print(d)
3
4d.clear()
5print(d)

خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

{'a': 10, 'b': 20, 'c': 30}
{}

متد Items دیکشنری

با استفاده از متد itemsمی‌توان به لیستی از جفت کلید-مقدار دیکشنری دسترسی داشت. به عبارتی، خروجی این تابع لیستی از تاپل‌ها است که آیتم‌ اول تاپل، کلید و آیتم دوم آن، مقدار کلید را مشخص می‌کند. در ادامه، مثالی از نحوه کاربرد این متد در پایتون ارائه شده است.

1d = {'a': 10, 'b': 20, 'c': 30}
2
3print(d)
4print(list(d.items()))
5print(list(d.items())[1][0])
6print(list(d.items())[1][1])

در ادامه، خروجی قطعه کد فوق ملاحظه می‌شود.

{'a': 10, 'b': 20, 'c': 30}
[('a', 10), ('b', 20), ('c', 30)]
'b'
20

متد Keys دیکشنری

با استفاده از متد keysمی‌توان به لیستی از کلیدهای دیکشنری در پایتون دسترسی داشت. در ادامه، مثالی از نحوه کاربرد این متد در پایتون ارائه شده است.

1d = {'a': 10, 'b': 20, 'c': 30}
2print(d)
3print(list(d.keys()))

خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

{'a': 10, 'b': 20, 'c': 30}
['a', 'b', 'c']

متد Values دیکشنری

با استفاده از متد valuesمی‌توان به لیستی از مقادیر دیکشنری در پایتون دسترسی داشت. در ادامه، مثالی از نحوه کاربرد این متد در پایتون ارائه شده است.

1d = {'a': 10, 'b': 20, 'c': 30}
2print(d)
3print(list(d.values()))

خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

{'a': 10, 'b': 20, 'c': 30}
[10, 20, 30]

چنانچه مقادیر کلیدها تکراری باشند، تمامی آن‌ها با متد valuesدر خروجی بازگردانده می‌شوند.

1d = {'a': 10, 'b': 10, 'c': 10}
2print(d)
3print(list(d.values()))

خروجی قطعه کد فوق به‌صورت زیر است:

{'a': 10, 'b': 10, 'c': 10}
[10, 10, 10]

متد Pop دیکشنری

با استفاده از متد popمی‌توان کلیدی را از دیکشنری پایتون حذف کرد و مقدار آن را پیش از حذف کلید، در خروجی بازگرداند. در ادامه مثالی از کاربرد این متد در پایتون ملاحظه می‌شود.

1d = {'a': 10, 'b': 20, 'c': 30}
2
3print(d.pop('b'))
4print(d)

خروجی دستورات بالا به‌صورت زیر است:

20
{'a': 10, 'c': 30}

متد pop، دارای پارامتر دیگری نیز است. چنانچه کلید مشخص شده در دیکشنری وجود نداشته باشد، خطای کامپایلر رخ می‌دهد؛ اما می‌توان با استفاده از پارامتر دوم این متد، از بروز خطای کامپایلر جلوگیری کرد. به عبارتی، پارامتر دوم، مقداری را مشخص می‌کند که اگر کلید مورد نظر در دیکشنری وجود نداشته باشد، به جای بروز خطا، این مقدار در خروجی بازگردانده شود. در قطعه کد زیر، نحوه استفاده از این پارامتر در قالب مثال ارائه شده است.

1d = {'a': 10, 'b': 20, 'c': 30}
2
3print(d.pop('z', -1))
4print(d)

خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

-1
{'a': 10, 'b': 20, 'c': 30}

متد Popitem دیکشنری

به منظور بازگرداندن و سپس حذف ‌‌آخرین جفت کلید-مقدار دیکشنری می‌توان از متد popitemدر پایتون استفاده کرد. خروجی متد popitemاز نوع ساختار داده تاپل است که آیتم اول آن، کلید و آیتم دوم، مقدار کلید را مشخص می‌کند. چنانچه دیکشنری تهی باشد و از این متد استفاده شود، خطای کامپایلر رخ می‌دهد. در ادامه، مثالی از نحوه کاربرد این متد در پایتون ارائه شده است.

1d = {'a': 10, 'b': 20, 'c': 30}
2
3print(d.popitem())
4print(d)

خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

{'a': 10, 'b': 20}

متد Update دیکشنری

از متد updateبه منظور ادغام کردن دو دیکشنری یا لیستی از تاپل‌ها با دیکشنری استفاده می‌شود. در ادامه، نحوه استفاده از این متد در پایتون ارائه شده است.

1d1 = {'a': 10, 'b': 20, 'c': 30}
2d2 = {'b': 200, 'd': 400}
3d1.update(d2)
4print(d1)
5
6
7d3 = {'a': 10, 'b': 20, 'c': 30}
8d3.update([('b', 200), ('d', 400)])
9print(d3)
10
11
12d4 = {'a': 10, 'b': 20, 'c': 30}
13d4.update(b=200, d=400)
14print(d4)

خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

{'a': 10, 'b': 200, 'c': 30, 'd': 400}
{'a': 10, 'b': 200, 'c': 30, 'd': 400}
{'a': 10, 'b': 200, 'c': 30, 'd': 400}
کلید در دیکشنری در پایتون

متد Copy دیکشنری

از متد copyبه منظور کپی کردن دیکشنری در یک متغیر دیگر استفاده می‌شود. پس از کپی کردن، نوع ساختار داده متغیر جدید، از نوع دیکشنری است. خاطرنشان می‌شود با اعمال تغییر در آیتم‌های دیکشنری جدید، تغییری در دیکشنری اصلی ایجاد نمی‌شود. در ادامه، مثالی از نحوه کاربرد این متد در پایتون ارائه شده است.

1original = {1: 'geeks', 2: 'for'}
2 
3# copying using copy() function
4new = original.copy()
5 
6# removing all elements from the list
7# Only new list becomes empty as copy()
8# does shallow copy.
9new.clear()
10 
11print('new: ', new)
12print('original: ', original)

خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

new:  {}
original:  {1: 'geeks', 2: 'for'}

متد Setdefault دیکشنری

از متد setdefaultبرای بازگرداندن مقادیر دیکشنری با استفاده از نام کلیدها استفاده می‌شود. این متد، عملکرد مشابهی با متد getدارد. تنها تفاوت متد setdefaultبا متد getدر این است زمانی که کلید، در دیکشنری وجود نداشته باشد، کلید را به همراه مقدار پیش‌فرض Noneبه دیکشنری اضافه می‌کند که البته می‌توان مقدار پیش‌فرض این متد را تغییر داد. در ادامه، مثالی از نحوه کاربرد متد setdefaultدر پایتون ارائه شده است.

1dict = {'Name': 'Zara', 'Age': 7}
2print "Value : %s" %  dict.setdefault('Age', None)
3print "Value : %s" %  dict.setdefault('Sex', None)

همان‌طور که در قطعه کد فوق ملاحظه می‌شود، متد setdefaultدارای دو پارامتر ورودی است که اولین پارامتر، کلیدی را مشخص می‌کند که بنا است مقدار آن بازگردانده شود؛ دومین پارامتر، مقدار پیش‌فرضی را مشخص می‌کند که در صورت عدم وجود کلید در دیکشنری، به عنوان خروجی برگردانده می‌شود. در این مثال، عبارت Noneبه عنوان مقدار پیش‌فرض این متد در نظر گرفته شده است که می‌توان این مقدار را تغییر داد. خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

Value : 7
Value : None

در ادامه مطلب حاضر،‌ به نحوه ساخت دیکشنری‌های تو در تو و کار با آن‌ها به همراه مثال پرداخته می‌شود

دیکشنری تو در تو در پایتون چیست ؟

در پایتون می‌توان دیکشنری‌های تو در تو ایجاد کرد. به عبارتی، کلیدهای دیکشنری می‌توانند مقادیری از نوع ساختار داده دیکشنری داشته باشند که هر کدام از این دیکشنری‌ها دارای کلیدها و مقادیر هستند.

دیکشنری تودرتو
دیکشنری تو در تو در پایتون

در ادامه، مثالی از دیکشنری تو در تو در پایتون ارائه شده است.

1people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
2          2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}
3
4print(people)

خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

{1: {'name': 'John', 'age': '27', 'sex': 'Male'}, 2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}

دسترسی به مقادیر دیکشنری های تو در تو در پایتون

به منظور دسترسی به آیتمی خاص در دیکشنری‌های تو در تو می‌توان از علامت براکت ( []) به‌صورت زیر استفاده کرد:

1people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
2          2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}
3
4print(people[1]['name'])
5print(people[1]['age'])
6print(people[1]['sex'])

در قطعه کد فوق ملاحظه می‌شود که به منظور بازگرداندن مقدار Johnاز دیکشنری people، در ابتدا از نام کلید دیکشنری بیرونی، یعنی 1، و سپس از نام کلید دیکشنری داخلی، یعنی name، استفاده شده است. به عبارتی، نام دیکشنری‌های درونی به ‌ترتیب درون علامت‌های براکت ( []) قرار می‌گیرند تا در نهایت مقدار کلید مورد نظر برگردانده شود. خروجی دستورات فوق به‌صورت زیر است:

John
27
Male

اضافه کردن آیتم جدید به دیکشنری های تو در تو در پایتون

به منظور اضافه کردن مقداری خاص در دیکشنری‌های تو در تو نیز از علامت براکت ( []) استفاده می‌شود. در قطعه کد زیر، نحوه اضافه کردن مقادیر جدید به دیکشنری‌های تو در تو ملاحظه می‌شود.

1people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
2          2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}
3
4people[3] = {}
5
6people[3]['name'] = 'Luna'
7people[3]['age'] = '24'
8people[3]['sex'] = 'Female'
9people[3]['married'] = 'No'
10
11print(people[3])

خروجی دستورات فوق به صورت زیر است:

{'name': 'Luna', 'age': '24', 'sex': 'Female', 'married': 'No'}

حذف آیتم از دیکشنری های تو در تو در پایتون

به منظور حذف آیتمی خاص از دیکشنری‌های درونی، از دستور delاستفاده می‌شود. به منظور دسترسی به آیتم خاص، اسامی کلیدهای دیکشنری‌ها در علامت‌های براکت ( []) نوشته می‌شوند. در ادامه، مثالی از نحوه حذف مقدار از دیکشنری‌های تو در توی پایتون ارائه شده است.

1people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
2          2: {'name': 'Marie', 'age': '22', 'sex': 'Female'},
3          3: {'name': 'Luna', 'age': '24', 'sex': 'Female', 'married': 'No'},
4          4: {'name': 'Peter', 'age': '29', 'sex': 'Male', 'married': 'Yes'}}
5
6del people[3]['married']
7del people[4]['married']
8
9print(people[3])
10print(people[4])

بر اساس قطعه کد فوق، آیتم 'married':'No'و 'married':'Yes'از دیکشنری‌های درونی حذف می‌شوند و در نهایت خروجی دستورات فوق به‌صورت زیر حاصل می‌شود:

{'name': 'Luna', 'age': '24', 'sex': 'Female'}
{'name': 'Peter', 'age': '29', 'sex': 'Male'}

حذف دیکشنری های درونی از دیکشنری های تو در تو در پایتون

به منظور حذف دیکشنری‌های درونی که مقادیر کلیدهای دیکشنری بیرونی محسوب می‌شوند، می‌توان از دستور delاستفاده کرد. در ادامه، مثالی از حذف دیکشنری درونی در پایتون ارائه شده است.

1people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
2          2: {'name': 'Marie', 'age': '22', 'sex': 'Female'},
3          3: {'name': 'Luna', 'age': '24', 'sex': 'Female'},
4          4: {'name': 'Peter', 'age': '29', 'sex': 'Male'}}
5
6del people[3], people[4]
7print(people)

با اجرای دستور فوق، کلیدهای 3و 4به همراه مقادیرشان که دیکشنری‌های داخلی به حساب می‌آیند، از دیکشنری بیرونی peopleحذف می‌شوند. خروجی قطعه کد فوق در ادامه ملاحظه می‌شود.

{1: {'name': 'John', 'age': '27', 'sex': 'Male'}, 2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}

جمع‌بندی

هدف از مقاله حاضر، شرح کاملی از مفهوم دیکشنری در زبان برنامه نویسی پایتون بود. دیکشنری به عنوان یکی از ساختارهای داده در زبان پایتون محسوب می‌شود که کاربرد زیادی در پیاده‌سازی پروژه‌های برنامه نویسی دارد. در این مقاله، نحوه ساخت این نوع ساختار داده در پایتون توضیح داده شد و ویژگی‌های منحصربفرد آن مورد بررسی قرار گرفت. علاوه‌براین، با ارائه مثال از زبان پایتون، به متدها و ویژگی‌های دیکشنری نیز پرداخته شد.

بر اساس رای ۲۲ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
geeksforgeeksrealpythongeeksforgeeksmediumrealpythonprogramiztutorialspoint
۱ دیدگاه برای «دیکشنری در پایتون — آموزش از صفر تا صد + کد و مثال»

ممنون از سایت خوبتون، میخواستم بدونم چجوری میتونم مقدار key و value رو از کاربر با کمک input دریافت کنم و داخل یک حلقه بگم که دیکشنریم ساخته بشه؟ هر کدی میزنم به خطا میخوره

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *