برنامه نویسی و طراحی سایت

OrderedDict در پایتون – توضیح کاربرد به زبان ساده + کد و مثال

OrderedDict در پایتون – توضیح کاربرد به زبان ساده + کد و مثال

«دیکشنری مرتب» (Ordered Dictionary) یا همان «OrderedDict» بسیار شبیه به دیکشنری در پایتون است و چندان تفاوت بزرگی بین این دو وجود ندارد. «کارکرد فنی» OrderedDict در پایتون نیز بسیار به دیکشنری در پایتون شباهت دارد. اما نکته کلیدی در این خصوص این است که دیکشنری مرتب آیتمی به حساب می‌آید که در زمره «کالکشن‌ها» (Collection) در پایتون قرار می‌گیرد. بنابراین، این نگه‌دارنده‌های کالکشن اساساً نوع داده‌های جایگزین برای انواع داده پیش‌فرض پایتون مثل set ،dict (نوع داده مجموعه در پایتون) و سایر موارد به حساب می‌آیند.

فهرست مطالب این نوشته
OrderedDict در پایتون چیست؟

تفاوت dict با OrderedDict در پایتون چیست؟

سینتکس OrderedDict در پایتون چگونه است؟

مهم ترین توابع در OrderedDict پایتون کدامند؟

متد popitem در OrderedDict پایتون

متد move_to_end در OrderedDict پایتون

معرفی فیلم های آموزش پایتون تم آف

مثال OrderedDict در پایتون

توضیحات کدهای مثال OrderedDict در پایتون

مثال دوم OrderedDict در پایتون

نکات مهم پیرامون OrderedDict در پایتون با ذکر مثال

تغییر مقدار کلید در OrderedDict پایتون

حذف و درج مجدد در OrderedDict پایتون

جمع‌بندی

faradars mobile

OrderedDict در پایتون چیست؟

OrderedDict نوع داده‌ای است که در حیطه دیکشنری نگه‌دارنده کالکشن قرار می‌گیرد. از دیدگاه عملکردی، این دیکشنری‌های مرتب‌سازی شده، قابلیت به خاطر سپردن ترتیب ورود مقادیر را دارند. بنابراین، چینشی که مقادیر بر اساس آن در دیکشنری قرار می‌گیرند به خوبی توسط نوع داده OrderedDict قابل درک است.

در نتیجه وقتی کلید جدیدی اضافه می‌شود یا یکی از کلیدهای فعلی تغییر می‌کند، چینش دوباره تنظیم خواهد شد، به این صورت که کلیدِ جدیداً تغییریافته به عنوان آخرین آیتم در نوع داده دیکشنری مرتب‌سازی شده قرار داده می‌شود. این در واقع اصلی‌ترین تفاوت میان دیکشنری مرتب با دیکشنری معمولی در پایتون است.

به بیان دیگر، OrderedDict در پایتون زیرکلاسی از کلاس دیکشنری است که ترتیب درج کلیدها را به خاطر می‌سپارد.

آموزش برنامه نویسی پایتون پیشرفته – ترفندهای Python
فیلم آموزش برنامه نویسی پایتون پیشرفته – ترفندهای Python در تم آف

کلیک کنید

تفاوت dict با OrderedDict در پایتون چیست؟

تنها تفاوت میان dict با OrderedDict در پایتون این است که OrderedDict ترتیبی که بر‌اساس آن کلیدها درج می‌شوند را به خاطر می‌سپارد. یک دیکشنری معمولی ترتیب درج را رصد نمی‌کند و تکرار در آن مقادیر را به ترتیبی خودسرانه ارائه می‌دهد. بر خلاف آن‌، ترتیبی که آیتم‌ها درج می‌شوند به وسیله OrderedDict به خاطر سپرده می‌شود.

OrderedDict در پایتون

سینتکس OrderedDict در پایتون چگونه است؟

سینتکس OrderedDict در پایتون به این صورت است که ابتدا باید ماژول OrderedDict را در برنامه ایمپورت کنیم و سپس با نسبت دادن تابع یا متُد OrderedDict()‎ به یک متغیر آن را به یک OrderedDict تبدیل می‌کنیم. در ادامه سینتکس OrderedDict در پایتون آمده است.

from collections import OrderedDict
dictionary_variable = OrderedDict()

در سینتکس بالا، ابتدا کلاس دیکشنری مرتب‌سازی شده از کلاس Collections ایمپورت شده است. این کار به وسیله گزاره import

 انجام می‌شود. در اینجا گزاره import

مرجع قرار داده شده است تا کلاس OrderedDict را از نگه‌دارنده کالکشن ایمپورت (وارد) کند. سپس متغیری اعلان می‌شود تا یک متغیر دیکشنری به وسیله ارجاع به متُد OrderedDict ایجاد شود. بنابراین، انجام این ارجاع، نوع داده OrderedDict را فعال می‌کند.

آموزش برنامه نویسی پایتون پیشرفته – ترفندهای Python
فیلم آموزش برنامه نویسی پایتون پیشرفته – ترفندهای Python

کلیک کنید

کاربران می‌توانند آیتم‌های جدیدی را در دیکشنری مرتب درج کنند و از اینجا به بعد، دیکشنری ترتیب درج را حفظ خواهد کرد. نکته مهم این است که متغیر دیکشنری که در اینجا استفاده شده، به عنوان یک تابع OrderedDict()

 عمل خواهد کرد.

نکته کلیدی در خصوص OrderedDict این است که OrderedDict در پایتون نسخه ۲.۷ انرژی بسیار زیادی را مصرف می‌کند. در نسخه ۲.۷ این انرژی مصرفی نسبت به انرژی مورد استفاده توسط یک دیکشنری معمولی بسیار بیشتر است. به علاوه، این اختلاف حافظه میان دیکشنری مرتب و دیکشنری معمولی در نسخه پایتون ۲.۷ به این دلیل رخ می‌دهد که لیست پیاده‌سازی پیوند داده شده دو برابری برای مرتب‌سازی مقادیر با ترتیبی مشخص به منظور حفظ ترتیب درج وجود دارد.

جالب است که از آغاز ارائه نسخه‌های ۳.۷ پایتون به بعد، خود دیکشنری‌های معمولی اطمینان حاصل می‌کنند ترتیب درج حفظ شود. بنابراین از نسخه‌های ۳.۷ پایتون، به جای استفاده از OrderedDict برای اطمینان از ترتیب درج، همان دیکشنری‌های معمولی خودشان این ضرورت را فراهم می‌کنند. این یک مزیت بزرگ دیکشنری‌ها در نسخه‌های ۳.۷ پایتون به حساب می‌آید.

OrderedDict در پایتون چگونه کار می کند
نحوه به خاطر سپردن ترتیب اعضا در OrderedDict پایتون

مهم ترین توابع در OrderedDict پایتون کدامند؟

دو تابع مهم قابل استفاده در OrderedDict پایتون به نام‌های popitem و move_to_end وجود دارد. در این بخش به معرفی این دو تابع پرداخته شده است.

آموزش برنامه نویسی پایتون Python – مقدماتی
فیلم آموزش برنامه نویسی پایتون Python – مقدماتی در تم آف

کلیک کنید

متد popitem در OrderedDict پایتون

متد popitem برای برداشتن یا حذف یک جُفت کلید-مقدار از OrderedDict در پایتون مورد استفاده قرار می‌گیرد. بنابراین، متُد popitem مسئولیت حذف یک آیتم از دیکشنری را بر عهده دارد. لذا وقتی که لازم باشد یک آیتم مشخص از دیکشنری حذف شود، آنگاه می‌توان از متُد popitem

در OrderedDict پایتون استفاده کرد. متُد popitem

دارای آرگومانی به نام last

 است. آرگومان last

دارای ۲ مقدار True

 یا False

 خواهد بود.

وقتی مقدار True

به متغیر last

تخصیص داده می‌شود، آنگاه pop

 براساس اصل «آخرین ورودی اولین خروجی» (Last In First Out | LIFO) عمل خواهد کرد. همچنین، وقتی last=False

 باشد، آنگاه عملیات pop

براساس قاعده FIFO عمل خواهد کرد. در FIFO وقتی pop

فراخوانی می‌شود، اولین آیتم درج شده به عنوان اولین آیتم خارج شده حذف خواهد شد.

OrderedDict در پایتون چیست

متد move_to_end در OrderedDict پایتون

متد move_to_end برای انتقال یک کلید مشخص به عنوان آخرین آیتم در دیکشنری استفاده می‌شود. بنابراین، وقتی که لازم باشد یک کلید به سمت راست‌ترین محل انتهایی یا سمت چپ‌ترین محل انتهایی انتقال داده شود، آنگاه می‌توان از متُد move_to_end استفاده کرد. متد move_to_end

 به‌گونه‌ای عمل می‌کند که وقتی last=true

 است، آنگاه کلید مشخص شده به نقطه انتهایی سمت راست دیکشنری منتقل می‌شود. در حالی که، وقتی مقدار متغیر last

برابر با False

باشد، کلید مربوطه در انتهای سمت چپ دیکشنری قرار داده می‌شود.

بنابراین، آخرین آرگومان مشخص می‌کند که آیا کلید تازه درج شده باید در انتهای سمت چپ یا انتهای سمت راست قرار داده شود. توابعی مثل move_to_end

میزان زیادی انعطاف‌پذیری را برای مدیریت چینش دیکشنری OrderedDict به ارمغان می‌آورند. این قابلیت از جمله مزیت‌های کلیدی استفاده از OrderedDict به جای دیکشنری‌های معمولی به حساب می‌آید.

موقعیت و محل کلیدهای موجود را می‌توان به گونه‌ای انعطاف‌پذیرانه تغییر داد یا آن‌ها را در داخل آیتم دیکشنری در محل مورد نیاز قرار داد.

معرفی فیلم های آموزش پایتون تم آف

آموزش پایتون تم آف

در پلتفرم تم آف دوره‌های آموزش پایتون در قالب مجموعه‌ای آموزشی گردآوری شده‌اند. البته مجموعه‌های آموزشی متعددی به خصوص در ارتباط با حوزه‌ها و فناوری‌های مختلف برنامه نویسی در مجموعه تم آف وجود دارد. علاقه‌مندان به این زبان برنامه نویسی می‌توانند برای شروع یادگیری پایتون از دوره‌های مقدماتی آن استفاده کنند. همچنین، چندین دوره آموزشی پروژه‌محور نیز در این مجموعه برای ادامه یادگیری و تقویت مهارت برنامه نویسی پایتون در دسترس علاقه‌مندان قرار دارند. در تصویر فوق تنها تعداد کمی از دوره‌های آموزشی پروژه‌محور مجموعه آموزش پایتون ملاحظه می‌شود.

  • برای دسترسی به همه فیلم های آموزش پایتون تم آف + اینجا کلیک کنید.

مثال OrderedDict در پایتون

در این بخش مثالی برای OrderedDict در پایتون ارائه شده است. کدهای این مثال در ادامه آمده است.

آموزش برنامه نویسی پایتون + مثال های عملی در Python
فیلم آموزش برنامه نویسی پایتون + مثال های عملی در Python در تم آف

کلیک کنید

پس از این کدها و نمایش خروجی، توضیحات لازم در خصوص کدها نیز ارائه شده‌اند.

from collections import OrderedDict
print("Normal Dicitonary:n")
Normal_dict = {}
Normal_dict['Item1'] = 10
Normal_dict['Item2'] = 20
Normal_dict['Item3'] = 30
Normal_dict['Item4'] = 40
Normal_dict['Item3'] = 70
for item_key, item_value in Normal_dict.items():
    print(item_key, item_value)
ordered_dict = OrderedDict()
ordered_dict['Item1'] = 10
ordered_dict['Item2'] = 20
ordered_dict['Item3'] = 30
ordered_dict['Item4'] = 40
ordered_dict.move_to_end('Item3')
print("n Ordered dicitonary before pop and move to end applied:n")
for item_key, item_value in ordered_dict.items():
    print(item_key, item_value)
ordered_dict.popitem(last=False)
print("n Ordered dicitonary after pop:n")
for item_key, item_value in ordered_dict.items():
    print(item_key, item_value)

خروجی کدهای فوق به صورت زیر است.

مثال OrderedDict در پایتون

توضیحات کدهای مثال OrderedDict در پایتون

در این بخش توضیحات مربوط به کدهای بالا ارائه شده‌اند:

  • در این مثال، ۲ دیکشنری ساخته شده است. اولین مورد یک دیکشنری معمولی به حساب می‌آید و آیتم‌ها در داخل آن قرار داده و نمایش داده شده‌اند. سپس، یک دیکشنری مرتب ایجاد و پس از آن نیز تابع یا همان متُد move_to_end

    روی آن اجرا شده است. بنابراین این تابع move_to_end

    اعمال شده روی آیتم سوم باعث می‌شود که آیتم سوم به آیتم آخر در دیکشنری تبدیل شود.

  • سپس متُد popitem

    اِعمال شده است. این متُد اولین آیتم را از دیکشنری حذف می‌کند، زیرا pop

     با آرگومان last=False

    اجرا می‌شود. به علاوه، از زمان ارائه نسخه ۳.۷ پایتون به جای استفاده از OrderedDict به منظور حصول اطمینان از ترتیب درج، از همان دیکشنری‌های معمولی هم می‌توان برای انجام این کار استفاده کرد.

آموزش برنامه نویسی پایتون پیشرفته – ترفندهای Python
فیلم آموزش برنامه نویسی پایتون پیشرفته – ترفندهای Python در تم آف

کلیک کنید

مثال دوم OrderedDict در پایتون

در این بخش نیز مثال دیگری برای آشنایی بیشتر با نحوه عملکرد OrderedDict در پایتون ارائه شده است.

# A Python program to demonstrate working of OrderedDict
from collections import OrderedDict

print("This is a Dict:n")
d = {}
d['a'] = 1
d['b'] = 2
d['c'] = 3
d['d'] = 4

for key, value in d.items():
	print(key, value)

print("nThis is an Ordered Dict:n")
od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3
od['d'] = 4

for key, value in od.items():
	print(key, value)

خروجی کدهای فوق به صورت زیر است.

This is a Dict:
a 1
c 3
b 2
d 4

This is an Ordered Dict:
a 1
b 2
c 3
d 4

نکات مهم پیرامون OrderedDict در پایتون با ذکر مثال

در این بخش به شرح نکات مهمی پرداخته شده است که باید در خصوص OrderedDict در پایتون بدانیم.

آموزش پروژه محور پایتون – پیاده سازی بینایی ماشین با کتابخانه MediaPipe
فیلم آموزش پروژه محور پایتون – پیاده سازی بینایی ماشین با کتابخانه MediaPipe در تم آف

کلیک کنید

تغییر مقدار کلید در OrderedDict پایتون

در صورتی که مقدار یک کلید خاص تغییر کند، محل آن کلید در OrderedDict بدون تغییر باقی می‌ماند. در ادامه مثالی برای این نکته مهم آمده است.

# A Python program to demonstrate working of key
# value change in OrderedDict
from collections import OrderedDict

print("Before:n")
od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3
od['d'] = 4
for key, value in od.items():
	print(key, value)

print("nAfter:n")
od['c'] = 5
for key, value in od.items():
	print(key, value)

خروجی کدهای فوق به صورت زیر است.

Before:

a 1
b 2
c 3
d 4

After:

a 1
b 2
c 5
d 4

حذف و درج مجدد در OrderedDict پایتون

حذف و درج مجدد کلید باعث می‌شود که آن کلید به انتهای دیکشنری منتقل شود، هر چند OrderedDict پایتون ترتیب درج حفظ می‌شود. برای این مورد نیز در ادامه مثالی ارائه شده است.

# A Python program to demonstrate working of deletion
# re-insertion in OrderedDict
from collections import OrderedDict

print("Before deleting:n")
od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3
od['d'] = 4

for key, value in od.items():
	print(key, value)

print("nAfter deleting:n")
od.pop('c')
for key, value in od.items():
	print(key, value)

print("nAfter re-inserting:n")
od['c'] = 3
for key, value in od.items():
	print(key, value)

خروجی کدهای بالا نیز به صورت زیر خواهد بود.

Before deleting:

a 1
b 2
c 3
d 4

After deleting:

a 1
b 2
d 4

After re-inserting:

a 1
b 2
d 4
c 3

جمع‌بندی

کالکشن‌هایی مثل دیکشنری مرتب یا همان OrderedDict در پایتون برای پیاده‌سازی عملکرد حافظه پنهان LRU بسیار کاربردی و مفید هستند. بنابراین، این نوع از عملکرد حافظه پنهان LRU مثل آیتم‌هایی که انتظار چینش آیتم‌ها برای حفظ ترتیب چینش از آن‌ها می‌رود از جمله حوزه‌های اصلی هستند که قابلیت عملکردی OrderedDict به طور وسیع به کار گرفته می‌شود. تست‌های برابری در میان اشیای OrderedDict و سایر اشیای نگاشتی برخلاف دیکشنری‌های معمولی به ترتیب چینش حساس نیستند. این تفاوت اصلی OrderedDict با دیکشنری معمولی است.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.