دیکشنری ها Dict در پایتون
دیکشنری ها (dict) نیز مثل سایر نوع های داده لیستی برای ذخیره مجموعه ای از داده ها در یک متغییر مناسب هستند، با این تفاوت که ما در انواع داده لیستی که قبلا بررسی کردیم مثل لیست ها، تاپل ها، مجموعه ها و یا مجموعه های منجمد (frozenset) یا به اندیس ها دسترسی نداشتیم و یا اگر به اندیس ها دسترسی داشتیم مثل نوع داده لیست کنترلی بر روی اندیس ها نداشتیم، و پایتون خود به ترتیب عناصر را شماره گذاری می کرد، اما گاهی نیاز است که اندیس ها نامتوالی باشند و یا بر اساس نیاز برنامه نویس شماره گذاری شوند، در اینجا دیکشنری ها به داد ما خواهند رسید، در دیکشنری، شما لیستی از داده ها دارید که اندیس آن ها را خودتان انتخاب کرده اید، در حقیقت دیکشنری ها یک نوع لیست کلید-مقدار (key-value) می باشند.
همانطور که از نام این نوع داده نیز مشخص است عملکرد دیکشنری ها مانند یک فرهنگ لغت می باشد، در فرهنگ لغت یک کلمه با معادل و هم معنی آن متناظر می شود، در نوع داده دیکشنری نیز به همین ترتیب عمل می شود شما یک کلید را به یک مقدار (value) متصل می کنید، کلید ها همواره غیر قابل تکرار هستند ولی مقادیر می توانند تکراری مورد استفاده قرار گیرند.
فهرست مطالب
تعریف دیکشنری
دیکشنری ها در پایتون داخل گیومه { } تعریف می شوند و هر جفت کلید-مقدار با استفاده از (،) از هم جدا می شوند، همچنین کلید ها با عملگر ( : ) به مقادیر نسبت داده می شوند. با چند مثال با نحوه تعریف یک دیکشنری آشنا خواهید شد.
# empty dictionary
my_dict = {}
# dictionary with integer keys
my_dict = {1: 'apple', 2: 'ball'}
# dictionary with mixed keys
my_dict = {'name': 'John', 1: [2, 4, 3]}
روش دیگر برای ساخت یک دیکشنری استفاده از سازنده آن ( )dict به شکل زیر می باشد:
# using dict()
my_dict = dict({1:'apple', 2:'ball'})
# from sequence having each item as a pair
my_dict = dict([(1,'apple'), (2,'ball')])
کلید ها و مقادیر در دیکشنری ها هر دو نصبت به حروف کوچک و بزرگ حساس هستند، پس کلید های هم نام که در برخی از حروف کوچک و بزرگ با هم تفاوت دارند دو کلید متفاوت خواهند بود.
>>> my_dict = {'a' : 1 , 'b' : 2 , 'A' : 3 , 'B' : 4}
>>> print(my_dict)
{'a': 1, 'b': 2, 'A': 3, 'B': 4}
نکته: اگر در تعریف دیکشنری از اندیس تکراری استفاده کنیم فقط اولین اندیس در دیکشنری باقی می ماند و باقی اندیس های تکراری بعد از آن حذف می شود، ولی مقدار اندیس اول با مقدار آخرین اندیس مشابه جایگزین می شود. برای درک بهتر به مثال زیر توجه کنید :
>>> my_dict = {1 : 'a' , 2 : 'b' , 1 : 'c' }
>>> print(my_dict)
{1: 'c', 2: 'b'}
>>> my_dict = {1 : 'a' , 2 : 'b' , 1 : 'c' , 1 : 'd'}
>>> print(my_dict)
{1: 'd', 2: 'b'}
دیکشنری ها می توانند به صورت تو در تو نیز تعریف شوند که کاربرد های خاص خود را داراست، حال به نحوه تعریف زیر توجه فرمایید :
>>> my_dict = {1: 'Geeks', 2: 'For', 3:{'A' : 'Welcome', 'B' : 'To', 'C' : 'Geeks'}}
>>> print(my_dict)
{1: 'Geeks', 2: 'For', 3: {'A': 'Welcome', 'B': 'To', 'C': 'Geeks'}}
دسترسی به عناصر دیکشنری
به عناصر یک دیکشنری به دو روش می توان دسترسی داشت، روش اول قرار دادن کلید مد نظر در بین براکت [ ] می باشد، در این روش اگر کلیدی که استفاده شده در دیکشنری وجود نداشته باشد پایتون اعلام خطا خواهد کرد. به مثال های زیر در این مورد توجه کنید :
>>> my_dict = {'name' : 'naser' , 'age' : 46}
>>> print(my_dict['name'])
naser
>>> print(my_dict['address'])
Traceback (most recent call last):
File "", line 1, in
KeyError: 'address'
روش دوم استفاده از متد ( )get می باشد، در این نوع دسترسی اگر کلیدی استفاده شود که در دیکشنری وجود نداشته باشد چایتون خطایی را اعلام نخواهد کرد و در خروجی مقدار None به معنی عدم وجود داده درخواستی را نمایش می دهد، به مثال زیر توجه کنید :
>>> my_dict = {'name' : 'naser' , 'age' : 46}
>>> print(my_dict.get('name'))
naser
>>> print(my_dict.get('address'))
None
برای دسترسی به عناصر یک دیکشنری تو در تو باید به صورت تو در تو به شکل زیر به آن دسترسی پیدا کرد :
>>> my_dict = {'d1' : {1 : 'pronesh'} , 'd2' : {'Name' : 'For'}}
>>> print(my_dict['d1'])
{1: 'pronesh'}
>>> print(my_dict['d1'][1])
Pronesh
>>> print(my_dict['d2']['Name'])
For
تغییر و اضافه کردن عناصر یک دیکشنری
دیکشنری ها در پایتون متغییر های قابل تغییر هستند، به این معنا که شما می توانید مقدار کلید های آن را تغییر دهید و یا یک جفت کلید-مقدار جدید به اضافه کنید. تغییر مقادیر در دیکشنری بسیار ساده است، کافیست به کلید مد نظر مقدار جدید را انتساب دهید، به مثال های زیر توجه کنید :
>>> my_dict = {'name' : 'homa' , 'age' : 29}
>>> my_dict['age'] = 19
>>> print(my_dict)
{'name': 'homa', 'age': 19}
افزودن یک جفت جدید به دیکشنری نیز به همین سادگی می باشد، کافیست متغییر خود را با کلید جدید مقدار دهی کنید، به مثال زیر توجه فرمایید :
>>> my_dict = {'name' : 'homa' , 'age' : 29}
>>> my_dict['address'] = 'Iran'
>>> print(my_dict)
{'name': 'homa', 'age': 19 , 'address' : 'Iran'}
>>> my_dict['value_set'] = 1 , 2 , 3
>>> print(my_dict)
{'name': 'homa', 'age': 19, 'address': 'Iran', 'value_set': (1, 2, 3)}
>>> my_dict[1] = {'new_dect' : {'1' : 'Life' , '2' : 'Geeks'}}
>>> print(my_dict)
{'name': 'homa', 'age': 19, 'address': 'Iran', 'value_set': (1, 2, 3), 1: {'new_dect': {'1': 'Life', '2': 'Geeks'}}}
همانطور که مشاهده می کنید اگر به کلید یک متغییر از نوع دیکشنری مقداری را نصبت بدیم در صورتی که آن کلید قبلا در بین کلید ها متغییر نبوده باشد، آن کلید به همراه مقدار انتصاب داده شده آن به جفت های متغییر ما اضافه خواهند شد. واگر مقدار کلید تکراری باشد باعث بروز شدن مقدار کلید خواهد شد.
حذف عناصر یک دیکشنری
برای حذف عناصر یک دیکشنری روش های مختلفی وجود دارد که به بررسی هر یک خواهیم پرداخت.
استفاده از متد pop
در این روش با صدا زدن متد pop و انتخاب کلید مورد نظر، عنصر با کلید مورد نظر حذف مقدار آن کلید به عنوان خروجی متد pop بر خواهد گشت.
>>> sqr = {1 : 1 , 2 : 4 , 3 : 9 , 4 : 16, 5 : 25}
>>> print(sqr.pop(4))
16
>>> print(sqr)
{1: 1, 2: 4, 3: 9, 5: 25}
استفاده از متد popitem
عملکرد این متد دقیقا مشابه با متد pop می باشد با این تفاوت که خروجی این متد علاوه بر کلید حذف شده مقدار آن هم می باشد و خروجی به صورت جفت خواهد بود.
>>> print(sqr.popitem())
(5, 25)
>>> print(sqr)
{1: 1, 2: 4, 3: 9}
استفاده از متد clear
این متد تمام جفت های یک دیکشنری را حذف می کند، به عبارت دیگر دیکشنری خالی می کند، و متغییر را به یک دیکشنری خالی تبدیل می کند.
>>> sqr.clear()
>>> print(sqr)
{}
استفاده از متد del
این متد خود متغییر را از بین می برد، به شکلی که آن متغییر برای کاربر دیگر قابل دسترس نخواهد بود.
>>> del sqr
>>> print(sqr)
Traceback (most recent call last):
File "", line 1, in
NameError: name 'sqr' is not defined
بررسی عضویت یک عنصر در دیکشنری
برای آزمون عضویت در دیکشنری ها از کلمه کلیدی in استفاده می شود، لازم به ذکر است بررسی عضویت تنها برای کلید ها قابل انجام است و برای مقادیر کاربرد ندارد.
>>> my_dict = {1 : 1 , 3 : 9 , 5 : 25 , 7 : 49 , 9 : 81}
>>> print(1 in my_dict)
True
>>> print(2 not in my_dict)
True
>>> print(49 in my_dict)
False
استفاده از دیکشنری ها در حلقه های for
از دیکشنری می توان به عنوان شمارنده حلقه for به شکل زیر استفاده کرد :
>>> sqr = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
>>> for i in sqr:
print(sqr[i])
1
9
25
49
81
برای دیکشنری ها متد های متعددی در پایتون پیشبینی شده که در جدول زیر می توانید لیست این متد ها را مشاهده نمایید :
به مثال زیر توجه نمایید، در این مثال با نحوه استفاده، برخی از متد های اشاره شده آشنا می شویم :
>>> for item in my_dict.items():
>>> print(item)
('Math', 0)
('English', 0)
('Science', 0)
>>> print(list(sorted(my_dict.keys())))
['English', 'Math', 'Science']
مثال1 : می خواهیم یک دیکشنری از جفت های عدد و مربع آن تولید کنیم :
>>> squares = {x: x*x for x in range(6)}
print(squares)
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
و یا می تواند به شکل زیر عمل کرده که معادل کد فوق می باشد :
>>> squares = {}
>>> for x in range(6):
squares[x] = x*x
>>> print(squares)
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
مثال 2 : می خواهیم یک دیکشنری از اعداد فرد و مربع آن ها تولید کنیم :
>>> odd_squares = {x: x*x for x in range(11) if x % 2 == 1}
>>> print(squares)
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
برای دیکشنری ها توابعی وجود دارد که کار با این نوع داده را برای ما ساده تر می کنند، جدول زیر لیستی از این توابع را به نمایش گذاشته است :
برای درک بهتر توابع جدول فوق با چند مثال آن را شرح خواهیم داد :
>>> sqr = {0: 0, 1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
>>> print(all(sqr))
False
>>> print(any(sqr))
True
>>> print(len(sqr))
6
>>> print(sorted(sqr))
[0, 1, 3, 5, 7, 9]
دیدگاهتان را بنویسید