رفتن به مطلب اصلی

دیکشنری

تا الان با چیزای مختلفی آشنا شدیم توی پایتون. ولی یه مورد خیلی عجیب داریم توی پایتون (توی یکسری زبان های برنامه نویسی دیگه هم البته داریم) به اسم دیکشنری (dictionary). به احتمال زیاد حداقل یکبار از دیکشنری لغت استفاده کردین. شما دنبال یه کلمه میگردین، پیداش میکنین و کلی توضیح جلوش میبینید. تا حالا شده دنبال یه کلمه بگردین و دوتا از اون توی دیکشنری باشه؟ قطعا اینطور نبوده و "هیچ" کلمه ای دوبار توی دیکشنری نمیاد. ولی توضیحات مشابه زیاد دیدین. دقیقا توی برنامه نویسی و توی پایتون هم همین مورد رو داریم. پس میشه اینطوری گفت که دیکشنری یه ظرفیه که حاوی تعداد کلید (key) و مقدار (value) هستش که هیچ کلیدی نمیتونه تکراری باشه ولی مقادیرش تکراری میتونه باشه! باید بگم که دیکشنری مرتب نیست و هیچ ترتیبی توش نیست ولی میشه بر اساس کلید، چیزایی که میخوایم رو پیدا کنیم. بریم سراغ مثال زیر:

esm_dic = {'Massoud':25, 'Hosein':15,'Ali':21,'Hasan':35}
print(esm_dic)

توی کد بالا اومدیم یک دیکشنری به اسم esm_dic تعریف کردیم که سن چند نفر رو نشون میده. احتمالا متوجه شدید که برای تعریف دیکشنری باید از { } استفاده کنیم. اولین چیزی که مینویسیم میشه کلید و بعدش : و بعدش مقداری میخوایم به اون کلید نسبت بدیم. برای تعریف کلید بعدی از , استفاده می کنیم. پس طبق دیکشنری بالا، ما 4 تا کلید داریم.

حالا میخوایم بدونیم Ali چند سالشه:

print(esm_dic['Ali'])

میخوایم یه شخص جدید به این دیکشنری اضافه کنیم:

esm_dic['Arash'] = 20
print(esm_dic)

امروز تولد Arash بود پس باید سنش رو عوض کنیم.

esm_dic['Arash'] = 21
print(esm_dic)

اما متاسفانه با خبر شدیم که Hasan تصادف کرد و مُرد:

del esm_dic['Hasan']
print(esm_dic)

از لیست بالا که بگذریم، باید به این اشاره کنم که یک کلید میتونه تعداد بیشتری مقدار داشته باشه، یعنی توضیحا بیشتری رو به یک کلید نسبت بدیم. کد زیر رو ببینید:

heyvan_rang = {'Ahoo':[1, 'zard', 'tehran'], 'Khers':[3, 'sefid', 'yazd'], 'Gorbe':[5, 'siah', 'kerman']}
print(heyvan_rang)

دیکشنری بالا اسم حیوانات مختلف رو به عنوان کلید نگه میداره و سه تا مقدار "سن"، "رنگ" و "شهر محل تولد" رو به عنوان مقدار به اون کلیدا نسبت میده. مثلا میخوام بدونیم که Khers چه رنگیه:

print(heyvan_rang['Khers'][1])

توی کد بالا دقت کنید که مقادیر رو توی یک "لیست" قرار دادیم پس برای دسترسی به مقادیر لیست باید ایندکس اونها رو فراخونی کنیم.

با استفاده از تابع ()update هم میشه به اینصورت مقادیر رو تغییر داد:

heyvan_rang.update({'Ahoo':[8, 'ghermez', 'abadan']})

تابع ()keys هم تمام کلیدها رو نشون میده:

heyvan_rang.keys()

تابع ()values هم تمام مقادیر رو نشون میده:

heyvan_rang.values()

باید دقت کنید که دوتا تابع آخر، فقط بازتاب دیکشنری ما هستن و فقط میتونیم اونها رو ببینیم و نمیتونیم ویرایش کنیم. اما اگر مثلا با تابع ()update بیایم دیکشنری رو تغییر بدیم، مقداری که دوتا تابع ()values و ()keys به ما میدن هم تغییر میکنه.

مورد دیگه ای که باید بگم اینه که یه زمانی میخوایم چک کنیم ببینیم فلان چیز توی کلید های ما هست یا نه (به in دقت کنید):

print('ghourbaghe' in heyvan_rang)
print('Khers' in heyvan_rang)

خط اول کلمه False رو چاپ میکنه و این یعنی که حیوانی به اسم ghourbaghe توی دیکشنری ما نیست و خط دوم True چاپ میکنه و نشون میده که khers توی دیکشنری هست.

اگر هم بخوایم چک کنیم ببینیم که فلان چیز توی مقادیر دیکشنری ما هست یا نه از کد زیر استفاده می کنیم:

print([3, 'yasi', 'yazd'] in heyvan_rang.values())
print([3, 'sefid', 'yazd'] in heyvan_rang.values())

خط اول کلمه False رو چاپ میکنه و این یعنی که مقداری که مد نظر ماست (توی اینجا منظورمون لیست مقادیره) توی دیکشنری ما نیست و خط دوم True چاپ میکنه و نشون میده که مقادیری که نوشتیم، توی دیکشنری هست.