Hash کردن کلید در دیکشنری

سلام به دوستان
چرا پایتون کلیدها را در دیکشنری hash می کند ؟
اگه hash نکنه چی میشه؟
ممنون

فکر میکنم برای جلوگیری از collision بین کلیدها.
کلا چیز جدیدی نیست گرچه اسم جدیدی در پایتون داره (دیکشنری!) ولی همون hash table هست که در زبانهای دیگه هم موجوده. اساسا یه lookup table هست.

فکر میکنم سوالتون این باشه که «چرا چیزهای غیر قابل hash شدن رو نمیشه به عنوان کلید دیکشنری استفاده کرد؟» در جواب باید بگم که «باید قابل هش باشه که پایتون بتونه باهاش hash table بسازه :joy:»
به عنوان مثال نمیشه یه دیکشنری رو به عنوان کلید یه دیکشنری دیگه استفاده کرد. چون دیکشنریها hashable نیستن. (تقریبا همه‌ی دیتاتایپهای پایتون hasable هستن)

1 Like

همم ربطی به پایتون نداره به الگریتم های هش مپ بر می گرده. در کل اینجوری هست که یه هش فانکشن داره که یه مقداری رو پاس می دی بهش و یه هش بر می گردونه بعد از اون هش توی یه hashing schema استفاده می کنه که یه هش مپ بسازی.

الگریتم های زیادی برای این کار وجود داره. نمی دونم پایتون کدوم رو استفاده می کنه اما برای شروع می تونین به linear probing hashing و یا cukoo hashing یه نگاه بندازین (‌ اینا الگریتم هایی هستن که برای هش مپ با تعداد کلید مشخص استفاده می شن اما برای درک مساله کمکتون می کنن. )

2 Likes

حرف تون کامل می کنم
دیتاتایپ های غیر قابل تغییر(immutable) می توانند به عنوان کلید باشند مانند عدد , رشته , تاپل
و برای value هر دیتاتایپی را می توان استفاده کرد

1 Like

سوالم اینکه چه دلیل داره که کلید hash بشه ؟ اگه hash نشه چی میشه؟

اون الگریتم ها رو نگاه بندازی متوجه می شی. قسمتی از پیاده سازی الگریتم هستش

1 Like

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