دیکشنریها در پایتون مثالی دیگر از ساختار داده میباشند. ازیک دیکشنری به منظور نگاشت یا ایجاد همبستگی بین عناصر برای ذخیرهسازی کلیدهایی که ممکن است به آنها نیاز داشته باشید،استفاده میشود. یک دیکشنری در پایتون دقیقاً شبیه یک دیکشنری در دنیای واقعی است. دیکشنریهای پایتون بوسیله دو عنصر یعنی کلیدها (Keys) و مقادیر (Values) تعریف میشوند.
- کلیدها یک عنصر واحد خواهند بود.
- مقادیر میتوانند یک لیست یا لیستی درون یک لیست دیگر، اعداد و … باشند.
ساختار دیکشنریهای پایتون:
Dict = { ' Tim': 18, xyz,.. }
یک دیکشنری درون یک جفت آکلاد لیست میشود، درون این آکلادها، کلیدها و مقادیر اعلان میشوند. هر کلید بوسیله یک کالن (:) از یک مقدار جدا میشود، و هر عنصر دیکشنری بوسیله یک کاما از عنصر دیگر متمایز میگردد.
خصوصیات کلیدهای دیکشنری
دو نکته مهم هنگام استفاده از کلیدهای دیکشنری عبارتند از:
- بیش از یک مقدار برای هر کلید مجاز نیست (هیچ کپی از یک کلید دیشکنری مجاز نیست)
- مقادیر در دیکشنری میتوانند از هرنوعی باشند، اما کلیدها باید حتما نوع دادههای غیرقابل تغییر (immutble) مانند اعداد، تاپلها یا رشتهها باشند.
- کلیدهای دیکشنری حساس به حروف بزرگ و کوچک هستند، با چند کلید با نام کلید یکسان اما حروف بزرگ یا کوچک، به عنوان کلیدهای متفاوت برخورد می شد.
مثال پایتون ۲
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} print (Dict['Tiffany'])
مثال پایتون ۳
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} print((Dict['Tiffany']))
- در این کد، یک دیکشنری با نام «Dict» داریم.
- نام و سن شخص را در این دیکشنری اعلان کردهایم، که نام « کلید» و سن «مقدار» میباشد.
- حال کد را اجرا می کنیم.
- سن tiffany از دیکشنری برگردانده میشود.
متدهای دیکشنری در پایتون
کپی کردن دیشکنری
میتوان کل یک دیکشنری را به یک دیکشنری جدید کپی کرد. برای مثال، در اینجا ما دیکشنری اصلی را درون دیکشنریهای جدید به نام Boys و Girls کپی کردهایم.
مثال پایتون ۲
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} Boys = {'Tim': 18,'Charlie':12,'Robert':25} Girls = {'Tiffany':22} studentX=Boys.copy() studentY=Girls.copy() print studentX print studentY
مثال پایتون ۳
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} Boys = {'Tim': 18,'Charlie':12,'Robert':25} Girls = {'Tiffany':22} studentX=Boys.copy() studentY=Girls.copy() print(studentX) print(studentY)
- یک دیکشنری اصلی (Dict) داریم که حاوی نام و سن همه پسراها و دخترهاست.
- اما میخواهیم لیست پسران را از لیست دختران جدا کنیم، بنابراین عنصرهای پسران و دختران را در دیکشنریهای جداگانه به نامهای Boys و Girls تعریف میکنیم.
- حالا مجدداً یک دیکشنری جدید به نام StudentX و StudentY ایجاد میکنیم، و همه کلید و مقادیر دیکشنری پسران را درون StudnetX و دختران را درون StduentY کپی میکنیم.
- اکنون برای بررسی اینکه چهکسی دختر یا پسر است، نیازی به جستجو در لیست دیکشنری اصلی (Dict) نیست، اگر میخواهید لیست پسران را ببینید تنها کافیست StduentX را چاپ کنید و اگر لیست دختران را می خواهید کافیست StudentY را چاپ کنید.
- بنابراین، با اجرای دیکشنری StduentX و StduentY، همه عناصر موجود در دیشکنریهای boys و girls به صورت جداگانه چاپ خواهند شد.
آپدیت دیشکنری
یک دیکشنری را میتوان با اضافه کردن یک ورودی (entry) یا زوج کلید-مقدار، یا حذف یک ورودی آپدیت کرد. در مثال زیر یک نام دیگر Sarah به دیکشنری خود اضافه کرده ایم.
مثال پایتون 2
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} Dict.update({"Sarah":9}) print Dict
مثال پایتون 3
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} Dict.update({"Sarah":9}) print(Dict)
- دیکشنری ما Dict حاوی نام Sarah نیست.
- از متد update برای اضافه کردن Sarah به دیکشنریمان استفاده کردیم.
- حال کد را اجرا می کنیم، Sarah یه دیکشنری اضافه میشود.
حذف کلید از دیکشنری
دیکشنریها در پایتون امکان حذف عناصر از لیست خود را نیز فراهم کردهاند. فرض کنیم که به نام Charlie در لیست نیاز ندارید، می توانید با کد زیر کلید آن را حذف کنید
مثال پایتون ۲
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} del Dict ['Charlie'] print Dict
مثال پایتون ۳
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} del Dict ['Charlie'] print(Dict)
وقتی که کد را اجرا می کنید، باید دیکشنری را بدون Charlie چاپ کند.
- از کد del Dict استفاده کردیم.
- وقتی که کد اجرا می شود، Charlie را از دیکشنری اصلی حذف میکند.
متدهای ()Item دیکشنری
متد ()item یک لیست از تاپلها (کلید،مقدار) را از دیشکنری برمیگرداند.
مثال پایتون ۲
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} print "Students Name: %s" % Dict.items()
مثال پایتون ۳
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} print("Students Name: %s" % list(Dict.items()))
- از متد ()items برای دیکشنریمان استفاده کردهایم.
- با اجرای کد، لیستی از آیتمها (کلیدها و مقادیر) از دیکشنری برگردانده میشود.
بررسی اینکه یک کلید در دیکشنری وجود دارد یا نه
برای یک لیست، میتوان چک کرد که ایا دیکشنری فرزند (Child Dictionary) درون دیکشنری اصلی موجود هست یا نه. در اینجا دو زیردیکشنری به نامهای Boys و Girls داریم، اکنون میخواهیم بررسی کنیم که آیا دیکشنری Boys در دیکشنری اصلی Dict وجود دارد یا نه. بدین منظور، از متد forloop و متد else if استفاده میکنیم.
مثال پایتون ۲
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} Boys = {'Tim': 18,'Charlie':12,'Robert':25} Girls = {'Tiffany':22} for key in Dict.keys(): if key in Boys.keys(): print True else: print False
مثال پایتون ۳
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} Boys = {'Tim': 18,'Charlie':12,'Robert':25} Girls = {'Tiffany':22} for key in list(Dict.keys()): if key in list(Boys.keys()): print(True) else: print(False)
- Forloop هر کلید از دیکشنری اصلی را برای کلیدهای Boys بررسی میکند.
- اگر در دیکشنری اصلی موجود باشد، باید true را چاپ کند و در غیر اینصورت false چاپ کند.
- با اجرای این کد، مقدار True سه مرتبه چاپ میشود، بنابراین سه عنصر از دیکشنری Boys در دیکشنری اصلی وجود دارد.
- بدین ترتیب مشخص میشود که Boys در دیکشنری اصلی وجود دارد.
مرتب سازی دیکشنری
در یک دیکشنری، میتوان عناصر را مرتبسازی کرد. برای مثال، اگر بخواهیم که نام عناصر دیکشنری خود را به ترتیب حروف الفبا چاپ کنیم، بایداز forloop استفاده کنیم. بدین صورت عناصر دیکشنری مرتب خواهند شد.
مثال پایتون ۲
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} Boys = {'Tim': 18,'Charlie':12,'Robert':25} Girls = {'Tiffany':22} Students = Dict.keys() Students.sort() for S in Students: print":".join((S,str(Dict[S])))
مثال پایتون ۳
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} Boys = {'Tim': 18,'Charlie':12,'Robert':25} Girls = {'Tiffany':22} Students = list(Dict.keys()) Students.sort() for S in Students: print(":".join((S,str(Dict[S]))))
- متغیر Stduents را برای دیشکنریمان اعلان کردیم.
- از دستور sort برای مرتبسازی عناصر درون دیکشنری استفاده کردیم.
- اما برای مرتبسازی هر عنصر در دیکشنری، از forloop همراه با اعلان متغیر S استفاده کردیم.
- اکنون، با اجرای کد، forloop هر عنصر از دیکشنری را فراخوانی کرده، و رشته و مقدار را به ترتیب چاپ می کند.
توابع داخلی دیشکنری در پایتون
متد ()len دیکشنری
تابع ()len تعداد زوجهای کلید-مقدار یک دیکشنری را برمیگرداند.
مثال پایتون ۲
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} print "Length : %d" % len (Dict)
مثال پایتون ۳
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} print("Length : %d" % len (Dict))
وقتی تابع len(Dict) اجرا میشود، خروجی «4» حاصل میشود زیرا چهار عنصر در دیکشنری وجود دارد.
انواع متغیر
در پایتون نیازی نیست که صریحا برای رزرو فضای حافظه متغیر اعلان کرد؛ این کار به صورت خودکار انجام میشود. برای تخصیص مقدار به متغیر از عملگر «=» یعنی علامت مساوی استفاده می شود. کدی که برای مشخص کردن نوع داده استفاده میشود «(type(Dict% » میباشد.
مثال پایتون ۲
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} print "variable Type: %s" %type (Dict)
مثال پایتون ۳
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} print("variable Type: %s" %type (Dict))
- از کد type% برای فهمیدن نوع متغیر استفاده کنید.
- با اجرای کد، مشخص میشود که نوع متغیر دیکشنری است.
متد ()cmp از لیستهای پایتون
متد مقایسه ()cmp در پایتون برای مقایسه مقادیر و کلیدهای دو دیکشنری استفاده می شود. اگر متد مقدار ۰ را برگرداند، دو دیکشنری باهم برابر هستند، اگر ۱ را برگرداند، dict1 > dict2 و اگر ۱- برگرداند dict1< dict2 می باشد.
مثال پایتون ۲
Boys = {'Tim': 18,'Charlie':12,'Robert':25} Girls = {'Tiffany':22} print cmp(Girls, Boys)
مثال پایتون ۳
cmp is not supported in Python 3
- دو دیکشنری با نامهای Boys و Girls داریم.
- هرکدام از دیکشنریها که ابتدا در cmp(Girls,Boys) اعلان شود، به عنوان دیکشنری 1 درنظر گرفته میشود. در مورد مثال ما، Grils ابتدا تعریف شده، بنابراین به عنوان دیکشنری ۱ لحاظ می شود و boys دیکشنری ۲ میشود.
- با اجرای کد، مقدار ۱- چاپ می شود که نشان میدهد که دیکشنری ۱ کوچکتر از دیکشنری ۲ میباشد.
متد Str(dict) از دیکشنری
با متد()Str، میتوان یک دیکشنری را به یک رشته با فرمت قابل چاپ تبدیل کرد.
مثال پایتون ۲
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} print "printable string:%s" % str (Dict)
مثال پایتون ۳
Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25} print("printable string:%s" % str (Dict))
- از کد (str(Dict% استفاده کنید.
- این کد عناصر دیکشنری را به صورت یک رشته با فرمت قابل چاپ تبدیل میکند.
در زیر لیست تمام متدهای دیکشنری آورده شده است
متد | توضیح | ساختار |
()copy |
کل دیکشنری را درون یک دیشکنری جدید کپی میکند. | ()dict.copy |
()update |
یک دیکشنری را با اضافه کردن یک ورودی یا زوج کلید-مقدار، و یا حذف یک ورودی آپدیت می کند |
Dict.update([other]) |
()items |
لیستی از زوج تاپلها (کلید، مقدار) از دیشکنری برمیگرداند. |
()dictionary.items |
()sort |
با استفاده از آن می توان عناصر را مرتبسازی کرد. |
()dictionary.sort |
()len |
تعداد زوجهای کلید-مقدار موجود در دیکشنری را برمیگرداند. |
len(dict) |
()cmp |
مقادیر و کلیدهای دو دیکشنری را با هم مقایسه میکند. |
cmp(dict1, dict2) |
()Str |
دیکشنری را به یک رشته با فرمت قابل چاپ تبدیل میکند. |
Str(dict) |
خلاصه دیکشنریها در پایتون
دیکشنری در یک زبان برنامهنویسی یک نوع ساختار داده است که برای ذخیره دادههایی بکار میرود که به شکلی به هم مرتبط هستند. دیکشنریهای پایتون به صورت عناصر کلید و مقدار تعریف میشوند. دیکشنریها دادهها را بدون هیچ ترتیب خاصی ذخیره میکنند، بنابراین ممکن است اطلاعات را به همان ترتیبی که وارد کردهاید مجدداً بدست نیاورید.
- بیش از یک مقدار برای هر کلید مجاز نیست (هیچ کپی از یک کلید دیشکنری مجاز نیست)
- مقادیر در دیکشنری میتوانند از هرنوعی باشند، اما کلیدها باید حتما نوع دادههای غیرقابل تغییر (immutble) مانند اعداد، تاپلها یا رشتهها باشند.
- کلیدهای دیکشنری حساس به حروف بزرگ و کوچک هستند ، با چند کلید ب نام کلید و حروف بزرگ یا کوچک ،به عنوان کلیدهای متفاوت برخورد میشود.
منبع: ترجمه از وبسایت guru99
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.