কিভাবে OrderedDict ব্যবহার করবেন, একটি পাইথন অর্ডার করা অভিধান।

ব্যবসায়

পাইথন ডিকশনারী (ডিক্ট টাইপের অবজেক্ট) উপাদানের ক্রম সংরক্ষণ করে না; 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 কনস্ট্রাক্টরের ক্রম এবং update() পদ্ধতিতে পাস করা কীওয়ার্ড আর্গুমেন্ট সংরক্ষণ করা হয়েছে।
collections — Container datatypes — Python 3.10.0 Documentation

সাধারণ অভিধান (ডিক্ট টাইপ অবজেক্ট) কনস্ট্রাক্টরের কাছেও পাস করা যেতে পারে, কিন্তু বাস্তবায়নের ক্ষেত্রে যেখানে ডিক্ট টাইপ অর্ডার সংরক্ষণ করে না, এটি থেকে উৎপন্ন 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 অবজেক্ট তৈরি করা সম্ভব। বিশেষত, এটি নিম্নলিখিত প্রবাহে করা যেতে পারে।

  1. list() ব্যবহার করে আইটেম() পদ্ধতির মাধ্যমে যে ভিউ অবজেক্টগুলি পাওয়া যায় তার তালিকা করুন।
  2. তালিকার সন্নিবেশ() পদ্ধতিতে কী-মানের জোড়ার একটি টিপল (কী, মান) যোগ করুন
  3. কনস্ট্রাক্টর সংগ্রহে প্রেরণ করে একটি নতুন বস্তু তৈরি করুন। 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() প্রথম আর্গুমেন্ট হিসেবে সন্নিবেশ করার অবস্থান এবং দ্বিতীয় আর্গুমেন্ট হিসেবে ঢোকানো উপাদান নির্দিষ্ট করে।

উদাহরণে, একটি নতুন অবজেক্ট মূল ভেরিয়েবলের সাথে বরাদ্দ করা হয়েছে এবং মূল অবজেক্টে কোন নতুন উপাদান যোগ করা হয় না।

উপাদান পুনর্বিন্যাস (পুনঃক্রম)

উপাদান প্রতিস্থাপন উপরের উদাহরণ হিসাবে একই প্রক্রিয়া.

  1. list() ব্যবহার করে আইটেম() পদ্ধতির মাধ্যমে যে ভিউ অবজেক্টগুলি পাওয়া যায় তার তালিকা করুন।
  2. একটি তালিকায় উপাদান প্রতিস্থাপন করুন
  3. কনস্ট্রাক্টর সংগ্রহে প্রেরণ করে একটি নতুন বস্তু তৈরি করুন। 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)])