دیکشنری در پایتون به عنوان یکی از پرکاربردترین انواع «ساختار داده» (Data Structure) محسوب میشود که برنامهنویسان تازهکار در ابتدای مسیر یادگیری این زبان باید با آن آشنا شوند. به دلیل ویژگیهای مهم و منحصربفرد دیکشنری پایتون، در اغلب پروژههای برنامه نویسی از آن به منظور نگهداری دادهها استفاده میشود و در بسیاری از اوقات، برنامه نویسان از روشهای مختلفی برای تبدیل لیست به دیکشنری در پایتون استفاده میکنند تا از ویژگیهای این ساختار داده بهرهمند شوند. در مطلب حاضر، پس از توضیح مختصری پیرامون مفهوم ساختار داده در برنامه نویسی و بهخصوص در زبان پایتون، به شرح ویژگیهای دیکشنری در این زبان و نحوه ساخت آن پرداخته میشود. همچنین، شیوه کار با این نوع ساختار داده و متدها و توابع آن نیز به همراه مثال مورد بررسی قرار میگیرند.
ساختار داده چیست ؟
ساختار داده یا همان ساختمان داده یکی از مفاهیم اصلی و مهم در برنامه نویسی است که افراد علاقهمند به یادگیری این حوزه، در ابتدای مسیر آموزش خود با آن آشنا میشوند. از ساختار داده در برنامه نویسی میتوان به منظور ذخیرهسازی و سازماندهی دادهها استفاده کرد. هر ساختار داده در زبانهای برنامه نویسی، روشی خاص و منحصربهفردی را برای ذخیره کردن داده و دسترسی به آنها فراهم میکند.
در زبان برنامه نویسی پایتون، چهار نوع ساختار داده با نامهای «لیست» (List)، «تاپل» (Tuple)، «مجموعه» (Set) و «دیکشنری» (Dictionary) وجود دارد. در پروژههای برنامه نویسی، بنا به نیاز برنامه نویس و با توجه به ویژگیهای مختلف هر یک از این ساختارهای داده، برخی از آنها مورد استفاده قرار میگیرند. به عنوان مثال، لیستها، قابلیت ذخیرهسازی دادهها را به ترتیب خاص فراهم میکنند و میتوان با استفاده از اندیس به دادههای لیست دسترسی داشت. تاپلها نیز برای ذخیره مقادیری با طول مشخص استفاده میشوند و پس از تعریف تاپل، دیگر نمیتوان به آیتمهای آن اضافه کرد. از مجموعه نیز به منظور ذخیرهسازی دادههای غیرتکراری استفاده میشود.
در بین این ساختارهای داده، دیکشنری پایتون مشابه «هشمپ» (HashMap)، «جدول جستجو» (Lookup Table) و «آرایه پیوندی» (Associative Array) در سایر زبانهای برنامه نویسی است که امکان ذخیرهسازی آیتمها را به صورت جفت «کلید-مقدار» (Key-Value) فراهم میکند. در ادامه، به توضیح بیشتری پیرامون ساختار دیکشنری در پایتون پرداخته شده است.
دیکشنری در پایتون چیست ؟
دیکشنری در پایتون یکی از ساختارهای داده مهم و پرکاربرد به حساب میآید. این ساختار داده مشابه ساختارهای داده در سایر زبانهای برنامه نویسی است که از آنها برای نگاشت «کلید» (Key) به «مقدار» (Value) استفاده میشود. همچنین، دیکشنری پایتون را میتوان با کلاس «هشمپ» (HashMap) در جاوا مقایسه کرد. به عبارتی، عملکرد هشمپ در جاوا مشابه دیکشنری در پایتون است؛ هر دوی آنها از «جدول هش» (HashTable) به منظور نگاشت کلیدها به مقادیرشان استفاده میکنند. به بیان دیگر، میتوان دیکشنری در پایتون را به عنوان «آرایه پیوندی» (Associative Array) تلقی کرد که با استفاده از جدول هش میتواند جفت آیتمهای کلید-مقدار را در حافظه ذخیره کند و با استفاده از کلید، به مقدار آن دسترسی داشته باشد.
ساختار داده دیکشنری پایتون در نخستین نسخه پایتون (نسخه 0.9.0) در سال 1991 ارائه شد و به نوعی، جزء اولین ساختارهای داده در پایتون محسوب میشد که بر پایه جدول هش کار میکرد. با بهکارگیری این ساختار داده میتوان عملیاتی نظیر جستجوی مقدار، اضافه کردن آیتم جدید، ویرایش مقادیر کلیدها و حذف مقداری خاص با استفاده از کلید را انجام داد.
میتوان به منظور درک بهتر دیکشنری در پایتون، از مثال ملموسی در دنیای واقعی استفاده کرد. دفترچه تلفن میتواند نمونه خوبی برای فهم دیکشنری پایتون باشد. در دفترچه تلفن، اطلاعات بر اساس نام اشخاص و شماره تماس آنها سازماندهی شده است.
نام اشخاص را میتوان به عنوان کلیدهای دیکشنری و شماره تماس افراد را میتوان به عنوان مقادیر دیکشنری در پایتون در نظر گرفت. زمانی که لازم است به شماره تماس فردی دسترسی داشته باشیم، نیازی نیست از ابتدا تا انتهای دفترچه تلفن به دنبال نام فرد بگردیم؛ بلکه کافی است مستقیماً در بخش خاصی از دفترچه به دنبال نام فرد مورد نظر باشیم. دیکشنری در پایتون نیز همانند دفترچه تلفن یا فرهنگ لغات، قابلیت جستجوی سریع اطلاعات را در اختیار برنامه نویس قرار میدهد و پیچیدگی زمانی یا همان مرتبه اجرایی آن برابر با $$O(
ویژگی های دیکشنری در پایتون چیست ؟
ساختار داده دیکشنری در پایتون ویژگیهای منحصربفردی برای ذخیره کردن دادهها، سازماندهی و دسترسی به آنها دارد که در ادامه فهرستی از آنها ارائه شده است:
- دیکشنری در پایتون برخلاف ساختار داده لیست، از ترتیب خاصی برای ذخیره کردن دادهها استفاده نمیکند.
- با استفاده از کلیدهای دیکشنری، میتوان مقادیر آنها را بازیابی کرد.
- برای تعریف کلیدها میتوان از اعداد صحیح و اعشاری، رشته و ساختار داده تاپل استفاده کرد.
- برای تعریف کلیدها در پایتون از ساختار داده دیکشنری و لیست استفاده نمیشود.
- کلیدهای دیکشنری پایتون باید منحصربفرد باشند. بنابراین، از عبارتهای تکراری نمیتوان برای ساخت کلیدها استفاده کرد.
- آیتمهای تکراری را میتوان برای مقادیر کلیدهای دیکشنری در پایتون به کار برد.
- مقادیر کلیدها میتوانند از هر نوع داده و ساختار دادهای تعریف شوند.
- یکی از ویژگیهای دیکشنری در پایتون، «قابل تغییر بودن» (Mutable) آن است؛ به عبارتی، پس از تعریف و مقداردهی اولیه آن، میتوان در طول برنامه، علاوهبر درج آیتم جدیدی به آن، مقداری را بهروزرسانی یا حذف کرد.
- دیکشنری در پایتون امکان ساخت دیکشنریهای تو در تو را فراهم میکند.
- در زبان پایتون میتوان ساختارهای داده را به یکدیگر تبدیل کرد. به عبارتی، هر یک از ساختارهای داده در پایتون، ویژگیهای خاصی دارند که برنامهنویسان بر حسب نیاز خود میتوانند اطلاعات خود را از یک ساختار داده به ساختار داده دیگری منتقل کنند. ساختار داده دیکشنری نیز از این قاعده مستثنی نیست. به عنوان مثال، روشهای مختلفی برای تبدیل دیکشنری به لیست و لیست به دیکشنری وجود دارند که میتوان بهسادگی از آنها بهره برد.
در ادامه مطلب، با ارائه مثال به نحوه ساخت دیکشنری در پایتون پرداخته میشود.
روش ها و نحوه ساخت دیکشنری در پایتون
به منظور ایجاد دیکشنری میتوان از چندین روش مختلف استفاده کرد که در ادامه، فهرستی از آنها ارائه شده است:
- استفاده از علامت آکولاد ( {}
)
- تابع dict()
- استفاده از تابع dict()
و تابع zip()
- متد fromkeys()
از تابع dict()
- روش Dictionary Comprehension
در ادامه مطلب حاضر، با ارائه مثال به توضیح هر یک از روشهای فوق برای ساخت دیکشنری در پایتون پرداخته میشود.
علامت آکولاد برای ساخت دیکشنری
برای تعریف دیکشنری در پایتون از علامت آکولاد ( {}
) و برای نگاشت کلیدها به مقادیر از علامت دو نقطه ( :
) استفاده میشود. در ادامه، «قاعده نحوی» (سینتکس) پایتون برای ایجاد دیکشنری ارائه شده است.
d = {
: ,
: ,
.
.
.
:
}
در قطعه کد زیر، مثالی از پایتون ارائه شده است که نحوه ساخت دیکشنری MLB_team
را نشان میدهد.
MLB_team = {
'Colorado' : 'Rockies',
'Boston' : 'Red Sox',
'Minnesota': 'Twins',
'Milwaukee': 'Brewers',
'Seattle' : 'Mariners'
}
ساخت دیکشنری با تابع Dict()
از تابع dict()
میتوان برای ساخت دیکشنری در پایتون استفاده کرد. پارامترهای این تابع، مجموعهای از جفت آیتمهای کلید-مقدار هستند. میتوان این آیتمها را در قالب لیستی از تاپلها به عنوان پارامتر تابع dict()
تعریف کرد. قاعده نحوی این تابع در ادامه ملاحظه میشود.
d = dict([
(, ),
(, , )
])
در قطعه کد زیر، مثالی از تعریف دیکشنری MLB_team
با استفاده از تابع dict()
ارائه شده است.
MLB_team = dict([
('Colorado', 'Rockies'),
('Boston', 'Red Sox'),
('Minnesota', 'Twins'),
('Milwaukee', 'Brewers'),
('Seattle', 'Mariners')
])
همچنین، چنانچه مقادیر کلیدهای دیکشنری، از نوع رشته باشند، میتوان با استفاده از تابع dict()
بهصورت زیر، دیکشنری را در پایتون تعریف کرد.
MLB_team = dict(
Colorado='Rockies',
Boston='Red Sox',
Minnesota='Twins',
Milwaukee='Brewers',
Seattle='Mariners'
)
ساخت دیکشنری با تابع Dict() و Zip()
به منظور ساخت دیکشنری در پایتون میتوان از دو لیست مجزا برای مشخص کردن کلیدها و مقادیر آنها استفاده کرد. سپس با استفاده از توابع dict()
و zip()
میتوان از این دو لیست به سادگی، دیکشنری جدیدی ساخت. در قطعه کد زیر، مثالی از کاربرد این دو تابع برای تعریف دیکشنری در پایتون ارائه شده است.
# Lists to represent keys and values
keys = ['a','b','c','d','e']
values = [1,2,3,4,5]
myDict = dict(zip(keys, values))
print(myDict)
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
استفاده از متد Dict.fromkeys() برای ساخت دیکشنری در پایتون
زمانی که لازم باشد یک دیکشنری با کلیدهایی ساخته شود که این کلیدها دارای مقادیر یکسان باشند، میتوان از متد fromkeys()
استفاده کرد. با استفاده از تابع dict()
میتوان به این متد دسترسی داشت. در قطعه کد زیر، مثالی از نحوه کاربرد این متد برای ساخت دیکشنری در پایتون ارائه شده است.
dic=dict.fromkeys(range(5), True)
print(dic)
طبق قطعه کد فوق، دیکشنری جدیدی با عنوان dic
ساخته میشود که دارای پنج آیتم با مقادیر یکسان True
است. خروجی این قطعه کد در ادامه ملاحظه میشود.
{0: True, 1: True, 2: True, 3: True, 4: True}
ساخت دیکشنری در پایتون با Dictionary Comprehension
چنانچه دو لیست مجزا برای کلیدها و مقادیر آنها وجود داشته باشند و نیاز باشد از این دو لیست به منظور ساخت دیکشنری در پایتون استفاده شود، میتوان از روش Dictionary Comprehension استفاده کرد. در این روش، میتوان با استفاده از حلقه for
و تابع zip()
، بهطور همزمان از هر دو لیست، آیتمها را خواند و در دیکشنری ذخیره کرد. روش کدنویسی مفهومی (Comprehension) فقط مختص به دیکشنری در پایتون نمیشود و به منظور ایجاد و مدیریت دیگر ساختارهای داده هم میتوان از آن استفاده کرد. مثلاً پیش از این در رابطه با «لیستهای مفهومی» (List Comprehension) مطلب مجزایی در مجله تم آف منتشر شده است.
List Comprehension در پایتون چیست و چه زمانی باید از آن استفاده کنیم؟
در قطعه کد زیر، مثالی از نحوه کاربرد روش Dictionary Comprehension به منظور ایجاد دیکشنری در پایتون ارائه شده است.
# Python code to demonstrate dictionary
# comprehension
# Lists to represent keys and values
keys = ['a','b','c','d','e']
values = [1,2,3,4,5]
# but this line shows dict comprehension here
myDict = { k:v for (k,v) in zip(keys, values)}
print (myDict)
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
معرفی فیلم های آموزش پایتون
افراد علاقهمند به یادگیری برنامه نویسی پایتون میتوانند از مجموعه دورههای جامع آموزش پایتون در پلتفرم تم آف استفاده کنند. سایت تم آف مجموعهای آموزشی را برای آن دسته از افرادی فراهم کرده است که قصد یادگیری پایتون را دارند. دورههای گردآوری شده در مجموعه آموزش پایتون، فیلمهای آموزشی مقدماتی تا پیشرفته و پروژهمحور زبان پایتون را شامل میشوند. افراد میتوانند از دورههای جامع پایتون در راستای تقویت مهارت برنامه نویسی خود استفاده کنند و از آموزشهای پروژهمحور تم آف بهره بگیرند. در تصویر فوق تنها برخی از دورههای مجموعه آموزش پایتون تم آف مشاهده میشوند.
- برای دسترسی به همه فیلم های آموزش پایتون تم آف + اینجا کلیک کنید.
دسترسی به مقادیر دیکشنری در پایتون
پس از ذخیره آیتمهای کلید-مقدار در دیکشنری پایتون، میتوان با استفاده از کلیدها، به مقادیرشان دسترسی داشت. دو روش برای دسترسی به مقادیر کلیدهای دیکشنری پایتون وجود دارد که در ادامه ملاحظه میشوند:
- استفاده از کلیدهای دیکشنری
- استفاده از متد get
دیکشنری
در ادامه، با ارائه مثال به توضیح هر یک از روشهای فوق پرداخته میشود.
استفاده از نام کلید برای دسترسی به مقادیر دیکشنری
برخلاف سایر ساختارهای داده در پایتون نظیر لیست، به منظور دسترسی به مقدار خاصی در دیکشنری پایتون از کلید به جای اندیس استفاده میشود. بدین منظور، نام کلید در داخل علامت براکت ( []
) نوشته میشود تا بتوان مقدار متناظر آن کلید را در خروجی بازگرداند. در قطعه کد زیر، مثالی از نحوه دسترسی به مقدار مربوط به کلید Minnesota
از دیکشنری MLB_team
ارائه شده است. چنانچه کلید فراخوانده شده، جزء کلیدهای دیکشنری نباشد، خطای کامپایلر رخ میدهد.
MLB_team = dict([
('Colorado', 'Rockies'),
('Boston', 'Red Sox'),
('Minnesota', 'Twins'),
('Milwaukee', 'Brewers'),
('Seattle', 'Mariners')
])
MLB_team['Minnesota']
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
'Twins'
استفاده از متد Get برای دسترسی به مقادیر دیکشنری
از متد get
نیز به منظور بازگرداندن مقدار کلید مورد نظر استفاده میشود. این متد داری دو پارامتر است. اولین پارامتر، نام کلیدی را مشخص میکند که مقدار آن باید در خروجی بازگردانده شود. دومین پارامتر متد get
، مقدار پیشفرضی است که میتوان برای کلید در نظر گرفت. به عبارتی، چنانچه کلید مورد نظر در دیکشنری یافت نشد، کامپایلر به جای خطا، مقدار تعیین شده برای پارامتر دوم این متد را برمیگرداند. بهطور پیشفرض، مقدار این پارامتر برابر با None
است. در قطعه کد زیر، مثالی از نحوه کاربرد این متد در دیکشنری پایتون ارائه شده است.
d = {'a': 10, 'b': 20, 'c': 30}
print(d.get('b'))
print(d.get('z'))
print(d.get('z', -1))
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
20 None -1
در ادامه مطلب حاضر، به نحوه ویرایش ساختار داده دیکشنری و حذف آیتمهای آن در زبان پایتون پرداخته میشود.
ویرایش دیکشنری در پایتون
به منظور ویرایش مقادیر دیکشنری، میتوان با تخصیص مقادیر جدید به کلیدهایی که از قبل در دیکشنری وجود داشتهاند، مقادیر آنها را تغییر داد. در قطعه کد زیر، مثالی از ویرایش مقدار مربوط به کلید Seattle
از دیکشنری MLB_team
ارائه شده است.
MLB_team = dict([
('Colorado', 'Rockies'),
('Boston', 'Red Sox'),
('Minnesota', 'Twins'),
('Milwaukee', 'Brewers'),
('Seattle', 'Mariners')
])
MLB_team['Seattle'] = 'Seahawks'
print(MLB_team)
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
{'Colorado': 'Rockies', 'Boston': 'Red Sox', 'Minnesota': 'Twins', 'Milwaukee': 'Brewers', 'Seattle': 'Seahawks', 'Kansas City': 'Royals'}
حذف مقادیر از دیکشنری در پایتون
چنانچه نیازی به آیتمی خاص در دیکشنری پایتون نباشد، میتوان جفت کلید-مقدار را با دستور del
از دیکشنری حذف کرد. در قطعه کد زیر، مثالی از نحوه حذف کلید Seattle
و مقدار آن از دیکشنری MLB_team
ارائه شده است.
MLB_team = dict([
('Colorado', 'Rockies'),
('Boston', 'Red Sox'),
('Minnesota', 'Twins'),
('Milwaukee', 'Brewers'),
('Seattle', 'Mariners')
])
del MLB_team['Seattle']
print(MLB_team)
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
{'Colorado': 'Rockies', 'Boston': 'Red Sox', 'Minnesota': 'Twins', 'Milwaukee': 'Brewers', 'Kansas City': 'Royals'}
محدودیت های کلیدها در دیکشنری پایتون
به منظور تعریف کلیدهای دیکشنری، میتوان از هر نوع رشته، اعداد صحیح، اعداد اعشاری و مقادیر True و False استفاده کرد. با این حال، برای انتخاب عبارتی خاص به عنوان کلید دیکشنری در پایتون، باید مد نظر داشت که از کلید تکراری استفاده نشود. دیکشنری، هر کلید منحصربفردی را به مقداری مشخص، نگاشت میکند. مقادیر کلیدها میتوانند تکراری باشند و هیچ محدودیتی برای نوع مقادیر وجود ندارد.
چنانچه برای اضافه کردن آیتم جدید به دیکشنری در پایتون، از کلید تکراری استفاده شود، مقدار جدید، جایگزین مقدار قبلی در دیکشنری میشود. در ادامه، مثالی از پایتون ارائه شده است که این حالت را نشان میدهد.
MLB_team = {
'Colorado' : 'Rockies',
'Boston' : 'Red Sox',
'Minnesota': 'Twins',
'Milwaukee': 'Brewers',
'Seattle' : 'Mariners'
}
MLB_team['Minnesota'] = 'Timberwolves'
print(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'}
محدودیت دیگری که پایتون برای تعریف کلیدها اعمال میکند این است که نمیتوان از ساختارهای دادهای نظیر لیست و دیکشنری استفاده کرد که پس از تعریف اولیهشان، قابل ویرایش هستند. به بیان دقیقتر، عبارتی که برای کلید تعریف میشود، باید غیرقابل تغییر باشد. بدینترتیب، فقط میتوان از رشتهها، اعداد صحیح و اعشاری و همچنین از ساختار داده تاپل برای ساخت کلیدها استفاده کرد. در قطعه کد زیر، مثالی از نحوه تعریف کلیدها با استفاده از ساختار داده تاپل ارائه شده است.
d = {(1, 1): 'a', (1, 2): 'b', (2, 1): 'c', (2, 2): 'd'}
print(d[(1,1)])
print(d[(2,1)])
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
'a' 'c'
در زیر، مثالی از تعریف کلید با استفاده از ساختار داده لیست ارائه شده است.
d = {[1, 1]: 'a', [1, 2]: 'b', [2, 1]: 'c', [2, 2]: 'd'}
print(d)
بر اساس محدودیت اعمال شده توسط پایتون، با اجرای قطعه کد فوق، خطای کامپایلر رخ میدهد:
Traceback (most recent call last): File "", line 1, in 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- در خروجی برگردانده میشود. در ادامه، مثالی از نحوه کاربرد این تابع در پایتون ارائه شده است.
dict1 = {'Name': 'Zara', 'Age': 7};
dict2 = {'Name': 'Mahnaz', 'Age': 27};
dict3 = {'Name': 'Abid', 'Age': 27};
dict4 = {'Name': 'Zara', 'Age': 7};
print "Return Value : %d" % cmp (dict1, dict2)
print "Return Value : %d" % cmp (dict2, dict3)
print "Return Value : %d" % cmp (dict1, dict4)
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
Return Value : -1 Return Value : 1 Return Value : 0
تابع Len دیکشنری
با استفاده از تابع len
میتوان تعداد آیتمهای ذخیره شده در دیکشنری را در خروجی برگرداند. در قطعه کد زیر، مثالی از نحوه کاربرد این تابع در پایتون ارائه شده است.
dict = {'Name': 'Zara', 'Age': 7};
print "Length : %d" % len (dict)
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
Length : 2
متد Clear دیکشنری
از متد clear
برای پاک کردن تمامی آیتمهای دیکشنری در پایتون استفاده میشود. در قطعه کد زیر، مثالی از نحوه کاربرد این تابع ارائه شده است.
d = {'a': 10, 'b': 20, 'c': 30}
print(d)
d.clear()
print(d)
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
{'a': 10, 'b': 20, 'c': 30} {}
متد Items دیکشنری
با استفاده از متد items
میتوان به لیستی از جفت کلید-مقدار دیکشنری دسترسی داشت. به عبارتی، خروجی این تابع لیستی از تاپلها است که آیتم اول تاپل، کلید و آیتم دوم آن، مقدار کلید را مشخص میکند. در ادامه، مثالی از نحوه کاربرد این متد در پایتون ارائه شده است.
d = {'a': 10, 'b': 20, 'c': 30}
print(d)
print(list(d.items()))
print(list(d.items())[1][0])
print(list(d.items())[1][1])
در ادامه، خروجی قطعه کد فوق ملاحظه میشود.
{'a': 10, 'b': 20, 'c': 30} [('a', 10), ('b', 20), ('c', 30)] 'b' 20
متد Keys دیکشنری
با استفاده از متد keys
میتوان به لیستی از کلیدهای دیکشنری در پایتون دسترسی داشت. در ادامه، مثالی از نحوه کاربرد این متد در پایتون ارائه شده است.
d = {'a': 10, 'b': 20, 'c': 30}
print(d)
print(list(d.keys()))
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
{'a': 10, 'b': 20, 'c': 30} ['a', 'b', 'c']
متد Values دیکشنری
با استفاده از متد values
میتوان به لیستی از مقادیر دیکشنری در پایتون دسترسی داشت. در ادامه، مثالی از نحوه کاربرد این متد در پایتون ارائه شده است.
d = {'a': 10, 'b': 20, 'c': 30}
print(d)
print(list(d.values()))
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
{'a': 10, 'b': 20, 'c': 30} [10, 20, 30]
چنانچه مقادیر کلیدها تکراری باشند، تمامی آنها با متد values
در خروجی بازگردانده میشوند.
d = {'a': 10, 'b': 10, 'c': 10}
print(d)
print(list(d.values()))
خروجی قطعه کد فوق بهصورت زیر است:
{'a': 10, 'b': 10, 'c': 10} [10, 10, 10]
متد Pop دیکشنری
با استفاده از متد pop
میتوان کلیدی را از دیکشنری پایتون حذف کرد و مقدار آن را پیش از حذف کلید، در خروجی بازگرداند. در ادامه مثالی از کاربرد این متد در پایتون ملاحظه میشود.
d = {'a': 10, 'b': 20, 'c': 30}
print(d.pop('b'))
print(d)
خروجی دستورات بالا بهصورت زیر است:
20 {'a': 10, 'c': 30}
متد pop
، دارای پارامتر دیگری نیز است. چنانچه کلید مشخص شده در دیکشنری وجود نداشته باشد، خطای کامپایلر رخ میدهد؛ اما میتوان با استفاده از پارامتر دوم این متد، از بروز خطای کامپایلر جلوگیری کرد. به عبارتی، پارامتر دوم، مقداری را مشخص میکند که اگر کلید مورد نظر در دیکشنری وجود نداشته باشد، به جای بروز خطا، این مقدار در خروجی بازگردانده شود. در قطعه کد زیر، نحوه استفاده از این پارامتر در قالب مثال ارائه شده است.
d = {'a': 10, 'b': 20, 'c': 30}
print(d.pop('z', -1))
print(d)
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
-1 {'a': 10, 'b': 20, 'c': 30}
متد Popitem دیکشنری
به منظور بازگرداندن و سپس حذف آخرین جفت کلید-مقدار دیکشنری میتوان از متد popitem
در پایتون استفاده کرد. خروجی متد popitem
از نوع ساختار داده تاپل است که آیتم اول آن، کلید و آیتم دوم، مقدار کلید را مشخص میکند. چنانچه دیکشنری تهی باشد و از این متد استفاده شود، خطای کامپایلر رخ میدهد. در ادامه، مثالی از نحوه کاربرد این متد در پایتون ارائه شده است.
d = {'a': 10, 'b': 20, 'c': 30}
print(d.popitem())
print(d)
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
{'a': 10, 'b': 20}
متد Update دیکشنری
از متد update
به منظور ادغام کردن دو دیکشنری یا لیستی از تاپلها با دیکشنری استفاده میشود. در ادامه، نحوه استفاده از این متد در پایتون ارائه شده است.
d1 = {'a': 10, 'b': 20, 'c': 30}
d2 = {'b': 200, 'd': 400}
d1.update(d2)
print(d1)
d3 = {'a': 10, 'b': 20, 'c': 30}
d3.update([('b', 200), ('d', 400)])
print(d3)
d4 = {'a': 10, 'b': 20, 'c': 30}
d4.update(b=200, d=400)
print(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
به منظور کپی کردن دیکشنری در یک متغیر دیگر استفاده میشود. پس از کپی کردن، نوع ساختار داده متغیر جدید، از نوع دیکشنری است. خاطرنشان میشود با اعمال تغییر در آیتمهای دیکشنری جدید، تغییری در دیکشنری اصلی ایجاد نمیشود. در ادامه، مثالی از نحوه کاربرد این متد در پایتون ارائه شده است.
original = {1: 'geeks', 2: 'for'}
# copying using copy() function
new = original.copy()
# removing all elements from the list
# Only new list becomes empty as copy()
# does shallow copy.
new.clear()
print('new: ', new)
print('original: ', original)
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
new: {} original: {1: 'geeks', 2: 'for'}
متد Setdefault دیکشنری
از متد setdefault
برای بازگرداندن مقادیر دیکشنری با استفاده از نام کلیدها استفاده میشود. این متد، عملکرد مشابهی با متد get
دارد. تنها تفاوت متد setdefault
با متد get
در این است زمانی که کلید، در دیکشنری وجود نداشته باشد، کلید را به همراه مقدار پیشفرض None
به دیکشنری اضافه میکند که البته میتوان مقدار پیشفرض این متد را تغییر داد. در ادامه، مثالی از نحوه کاربرد متد setdefault
در پایتون ارائه شده است.
dict = {'Name': 'Zara', 'Age': 7}
print "Value : %s" % dict.setdefault('Age', None)
print "Value : %s" % dict.setdefault('Sex', None)
همانطور که در قطعه کد فوق ملاحظه میشود، متد setdefault
دارای دو پارامتر ورودی است که اولین پارامتر، کلیدی را مشخص میکند که بنا است مقدار آن بازگردانده شود؛ دومین پارامتر، مقدار پیشفرضی را مشخص میکند که در صورت عدم وجود کلید در دیکشنری، به عنوان خروجی برگردانده میشود. در این مثال، عبارت None
به عنوان مقدار پیشفرض این متد در نظر گرفته شده است که میتوان این مقدار را تغییر داد. خروجی قطعه کد فوق در ادامه ملاحظه میشود.
Value : 7 Value : None
در ادامه مطلب حاضر، به نحوه ساخت دیکشنریهای تو در تو و کار با آنها به همراه مثال پرداخته میشود
دیکشنری تو در تو در پایتون چیست ؟
در پایتون میتوان دیکشنریهای تو در تو ایجاد کرد. به عبارتی، کلیدهای دیکشنری میتوانند مقادیری از نوع ساختار داده دیکشنری داشته باشند که هر کدام از این دیکشنریها دارای کلیدها و مقادیر هستند.
در ادامه، مثالی از دیکشنری تو در تو در پایتون ارائه شده است.
people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}
print(people)
خروجی قطعه کد فوق در ادامه ملاحظه میشود.
{1: {'name': 'John', 'age': '27', 'sex': 'Male'}, 2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}
دسترسی به مقادیر دیکشنری های تو در تو در پایتون
به منظور دسترسی به آیتمی خاص در دیکشنریهای تو در تو میتوان از علامت براکت ( []
) بهصورت زیر استفاده کرد:
people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}
print(people[1]['name'])
print(people[1]['age'])
print(people[1]['sex'])
در قطعه کد فوق ملاحظه میشود که به منظور بازگرداندن مقدار John
از دیکشنری people
، در ابتدا از نام کلید دیکشنری بیرونی، یعنی 1
، و سپس از نام کلید دیکشنری داخلی، یعنی name
، استفاده شده است. به عبارتی، نام دیکشنریهای درونی به ترتیب درون علامتهای براکت ( []
) قرار میگیرند تا در نهایت مقدار کلید مورد نظر برگردانده شود. خروجی دستورات فوق بهصورت زیر است:
John 27 Male
اضافه کردن آیتم جدید به دیکشنری های تو در تو در پایتون
به منظور اضافه کردن مقداری خاص در دیکشنریهای تو در تو نیز از علامت براکت ( []
) استفاده میشود. در قطعه کد زیر، نحوه اضافه کردن مقادیر جدید به دیکشنریهای تو در تو ملاحظه میشود.
people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}
people[3] = {}
people[3]['name'] = 'Luna'
people[3]['age'] = '24'
people[3]['sex'] = 'Female'
people[3]['married'] = 'No'
print(people[3])
خروجی دستورات فوق به صورت زیر است:
{'name': 'Luna', 'age': '24', 'sex': 'Female', 'married': 'No'}
حذف آیتم از دیکشنری های تو در تو در پایتون
به منظور حذف آیتمی خاص از دیکشنریهای درونی، از دستور del
استفاده میشود. به منظور دسترسی به آیتم خاص، اسامی کلیدهای دیکشنریها در علامتهای براکت ( []
) نوشته میشوند. در ادامه، مثالی از نحوه حذف مقدار از دیکشنریهای تو در توی پایتون ارائه شده است.
people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
2: {'name': 'Marie', 'age': '22', 'sex': 'Female'},
3: {'name': 'Luna', 'age': '24', 'sex': 'Female', 'married': 'No'},
4: {'name': 'Peter', 'age': '29', 'sex': 'Male', 'married': 'Yes'}}
del people[3]['married']
del people[4]['married']
print(people[3])
print(people[4])
بر اساس قطعه کد فوق، آیتم ‘married’:’No’
و ‘married’:’Yes’
از دیکشنریهای درونی حذف میشوند و در نهایت خروجی دستورات فوق بهصورت زیر حاصل میشود:
{'name': 'Luna', 'age': '24', 'sex': 'Female'} {'name': 'Peter', 'age': '29', 'sex': 'Male'}
حذف دیکشنری های درونی از دیکشنری های تو در تو در پایتون
به منظور حذف دیکشنریهای درونی که مقادیر کلیدهای دیکشنری بیرونی محسوب میشوند، میتوان از دستور del
استفاده کرد. در ادامه، مثالی از حذف دیکشنری درونی در پایتون ارائه شده است.
people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
2: {'name': 'Marie', 'age': '22', 'sex': 'Female'},
3: {'name': 'Luna', 'age': '24', 'sex': 'Female'},
4: {'name': 'Peter', 'age': '29', 'sex': 'Male'}}
del people[3], people[4]
print(people)
با اجرای دستور فوق، کلیدهای 3
و 4
به همراه مقادیرشان که دیکشنریهای داخلی به حساب میآیند، از دیکشنری بیرونی people
حذف میشوند. خروجی قطعه کد فوق در ادامه ملاحظه میشود.
{1: {'name': 'John', 'age': '27', 'sex': 'Male'}, 2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}
جمعبندی
هدف از مقاله حاضر، شرح کاملی از مفهوم دیکشنری در زبان برنامه نویسی پایتون بود. دیکشنری به عنوان یکی از ساختارهای داده در زبان پایتون محسوب میشود که کاربرد زیادی در پیادهسازی پروژههای برنامه نویسی دارد. در این مقاله، نحوه ساخت این نوع ساختار داده در پایتون توضیح داده شد و ویژگیهای منحصربفرد آن مورد بررسی قرار گرفت. علاوهبراین، با ارائه مثال از زبان پایتون، به متدها و ویژگیهای دیکشنری نیز پرداخته شد.