Python لغات (dict قسم کی اشیاء) عناصر کی ترتیب کو محفوظ نہیں رکھتی ہیں۔ CPython نے 3.6 سے ایسا کیا ہے، لیکن یہ عمل درآمد پر منحصر ہے اور دیگر نفاذات میں غیر معینہ مدت کے لیے ہے۔ زبان کی تصریح نے 3.7 سے ترتیب کو محفوظ رکھا ہے۔
OrderedDict معیاری لائبریری کے مجموعہ ماڈیول میں ایک لغت کے طور پر فراہم کی گئی ہے جو ترتیب کو محفوظ رکھتی ہے۔ اس کو استعمال کرنا محفوظ ہے۔
کلیکشن ماڈیول درآمد کریں۔ یہ معیاری لائبریری میں شامل ہے اور اسے انسٹال کرنے کی ضرورت نہیں ہے۔
import collections
اگر آپ درج ذیل لکھتے ہیں، تو آپ مجموعوں کو چھوڑ سکتے ہیں۔ مندرجہ ذیل مثالوں میں.
from collections import OrderedDict
OrderedDict استعمال کرنے کے طریقے کی تفصیل درج ذیل ہے۔
- OrderedDict آبجیکٹ بنانا
- OrderedDict dict کا ایک ذیلی طبقہ ہے۔
- عناصر کو شروع یا اختتام پر منتقل کریں۔
- کسی بھی پوزیشن پر ایک نیا عنصر شامل کریں۔
- عناصر کو دوبارہ ترتیب دیں (دوبارہ ترتیب دیں)
- کلید یا قدر کے لحاظ سے عناصر کو ترتیب دیں۔
OrderedDict آبجیکٹ بنانا
Constructor collections.OrderedDict() کو OrderedDict آبجیکٹ بنانے کے لیے استعمال کیا جا سکتا ہے۔
ایک خالی OrderedDict آبجیکٹ بنائیں اور قدریں شامل کریں۔
od = collections.OrderedDict()
od['k1'] = 1
od['k2'] = 2
od['k3'] = 3
print(od)
# OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)])
کنسٹرکٹر کو دلائل بتانا بھی ممکن ہے۔
آپ کلیدی الفاظ کے دلائل، کلیدی قدر کے جوڑوں کی ترتیب (جیسے ٹیپلز (کلید، قدر))، وغیرہ استعمال کر سکتے ہیں۔ مؤخر الذکر ایک فہرست یا ٹوپل ہو سکتا ہے جب تک کہ یہ کلیدی قدر کا جوڑا ہو۔
print(collections.OrderedDict(k1=1, k2=2, k3=3))
print(collections.OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)]))
print(collections.OrderedDict((['k1', 1], ['k2', 2], ['k3', 3])))
# OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)])
# OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)])
# OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)])
ورژن 3.5 تک، مطلوبہ الفاظ کے دلائل کی ترتیب محفوظ نہیں تھی، لیکن ورژن 3.6 کے بعد سے، یہ اب محفوظ ہے۔
ورژن 3.6 میں تبدیل کیا گیا: PEP 468 کی منظوری کے ساتھ، OrderedDict کنسٹرکٹر کا آرڈر اور اپ ڈیٹ() طریقہ کو پاس کیے گئے کلیدی الفاظ کے دلائل محفوظ ہیں۔
collections — Container datatypes — Python 3.10.0 Documentation
عام لغات (ڈکٹ ٹائپ آبجیکٹ) بھی کنسٹرکٹر کو بھیجی جا سکتی ہیں، لیکن نفاذ کی صورت میں جہاں dict قسم ترتیب کو محفوظ نہیں رکھتی ہے، اس سے تیار کردہ OrderedDict بھی ترتیب کو محفوظ نہیں رکھے گی۔
print(collections.OrderedDict({'k1': 1, 'k2': 2, 'k3': 3}))
# OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)])
OrderedDict dict کا ایک ذیلی طبقہ ہے۔
OrderedDict dict کا ایک ذیلی طبقہ ہے۔
print(issubclass(collections.OrderedDict, dict))
# True
OrderedDict کے بھی وہی طریقے ہیں جیسے dict، اور عناصر کو حاصل کرنے، تبدیل کرنے، شامل کرنے اور ہٹانے کے طریقے dict کے ہی ہیں۔
print(od['k1'])
# 1
od['k2'] = 200
print(od)
# OrderedDict([('k1', 1), ('k2', 200), ('k3', 3)])
od.update(k4=4, k5=5)
print(od)
# OrderedDict([('k1', 1), ('k2', 200), ('k3', 3), ('k4', 4), ('k5', 5)])
del od['k4'], od['k5']
print(od)
# OrderedDict([('k1', 1), ('k2', 200), ('k3', 3)])
تفصیل کے لیے درج ذیل مضمون کو دیکھیں۔
عناصر کو شروع یا اختتام پر منتقل کریں۔
آپ OrderedDict کا اپنا طریقہ move_to_end() استعمال کر سکتے ہیں تاکہ کسی عنصر کو شروع یا آخر تک لے جا سکیں۔
پہلی دلیل کے طور پر کلید کی وضاحت کریں۔ ڈیفالٹ آخر میں منتقل کرنا ہے، لیکن اگر آخری دلیل غلط ہے، تو اسے شروع میں منتقل کیا جائے گا۔
od.move_to_end('k1')
print(od)
# OrderedDict([('k2', 200), ('k3', 3), ('k1', 1)])
od.move_to_end('k1', False)
print(od)
# OrderedDict([('k1', 1), ('k2', 200), ('k3', 3)])
کسی بھی پوزیشن پر ایک نیا عنصر شامل کریں۔
صوابدیدی پوزیشن میں شامل ایک نئے عنصر کے ساتھ ایک نیا OrderedDict آبجیکٹ بنانا ممکن ہے۔ خاص طور پر، یہ مندرجہ ذیل بہاؤ میں کیا جا سکتا ہے.
- ان ویو اشیاء کی فہرست بنائیں جو list() کا استعمال کرتے ہوئے آئٹمز() طریقہ سے حاصل کی جاسکتی ہیں۔
- فہرست کے insert() طریقہ میں کلیدی قدر کے جوڑوں کا ایک ٹوپل (کلیدی، قدر) شامل کریں۔
- کنسٹرکٹر کلیکشنز کو بھیج کر ایک نیا آبجیکٹ بنائیں۔ OrderedDict()
l = list(od.items())
print(l)
# [('k1', 1), ('k2', 200), ('k3', 3)]
l.insert(1, ('kx', -1))
print(l)
# [('k1', 1), ('kx', -1), ('k2', 200), ('k3', 3)]
od = collections.OrderedDict(l)
print(od)
# OrderedDict([('k1', 1), ('kx', -1), ('k2', 200), ('k3', 3)])
insert() پہلی دلیل کے طور پر داخل کی جانے والی پوزیشن، اور عنصر کو دوسری دلیل کے طور پر داخل کرنے کی وضاحت کرتا ہے۔
مثال میں، ایک نیا آبجیکٹ اصل متغیر کو تفویض کیا جاتا ہے، اور اصل آبجیکٹ میں کوئی نیا عنصر شامل نہیں کیا جاتا ہے۔
عناصر کو دوبارہ ترتیب دیں (دوبارہ ترتیب دیں)
عناصر کو تبدیل کرنا وہی عمل ہے جو اوپر کی مثال میں ہے۔
- ان ویو اشیاء کی فہرست بنائیں جو list() کا استعمال کرتے ہوئے آئٹمز() طریقہ سے حاصل کی جاسکتی ہیں۔
- فہرست میں عناصر کو تبدیل کریں۔
- کنسٹرکٹر کلیکشنز کو بھیج کر ایک نیا آبجیکٹ بنائیں۔ OrderedDict()
l = list(od.items())
print(l)
# [('k1', 1), ('kx', -1), ('k2', 200), ('k3', 3)]
l[0], l[2] = l[2], l[0]
print(l)
# [('k2', 200), ('kx', -1), ('k1', 1), ('k3', 3)]
od = collections.OrderedDict(l)
print(od)
# OrderedDict([('k2', 200), ('kx', -1), ('k1', 1), ('k3', 3)])
اگر آپ کسی کلید کی وضاحت کرنا چاہتے ہیں اور اسے تبدیل کرنا چاہتے ہیں، تو نیچے دکھائے گئے کلیدوں کی فہرست سے انڈیکس (پوزیشن) حاصل کرنے کے لیے index() طریقہ استعمال کریں۔
l = list(od.items())
k = list(od.keys())
print(k)
# ['k2', 'kx', 'k1', 'k3']
print(k.index('kx'))
# 1
l[k.index('kx')], l[k.index('k3')] = l[k.index('k3')], l[k.index('kx')]
print(l)
# [('k2', 200), ('k3', 3), ('k1', 1), ('kx', -1)]
od = collections.OrderedDict(l)
print(od)
# OrderedDict([('k2', 200), ('k3', 3), ('k1', 1), ('kx', -1)])
کلید یا قدر کے لحاظ سے عناصر کو ترتیب دیں۔
ویو آبجیکٹ کی بنیاد پر ترتیب شدہ کلیدی قدر کے جوڑوں کے ٹیپلز (کلید، قدر) کی ایک فہرست بنائیں جو آئٹمز() طریقہ سے حاصل کی جا سکتی ہیں، اور اسے کنسٹرکٹر کلیکشنز کو بھیجیں۔ OrderedDict() نیا آبجیکٹ بنانے کے لیے۔
چھانٹنا ایک گمنام فنکشن (لیمبڈا ایکسپریشن) کی وضاحت کرکے انجام دیا جاتا ہے جو بلٹ ان فنکشن sorted() کی دلیل کلید کے طور پر ٹیوپل (کی، قدر) سے کلید یا قدر لوٹاتا ہے۔
اگر آپ ترتیب کو ریورس کرنا چاہتے ہیں تو sorted() کے الٹ دلیل کو سچ پر سیٹ کریں۔
print(od)
# OrderedDict([('k2', 200), ('k3', 3), ('k1', 1), ('kx', -1)])
od_sorted_key = collections.OrderedDict(
sorted(od.items(), key=lambda x: x[0])
)
print(od_sorted_key)
# OrderedDict([('k1', 1), ('k2', 200), ('k3', 3), ('kx', -1)])
od_sorted_value = collections.OrderedDict(
sorted(od.items(), key=lambda x: x[1], reverse=True)
)
print(od_sorted_value)
# OrderedDict([('k2', 200), ('k3', 3), ('k1', 1), ('kx', -1)])


