Python အဘိဓာန်များသည် ဒြပ်စင်များ၏ အစီအစဥ်ကို မစောင့်ထိန်းပါ။ CPython သည် 3.6 ကတည်းက ထိုသို့လုပ်ဆောင်ခဲ့သော်လည်း ၎င်းသည် အကောင်အထည်ဖော်မှုအပေါ် မူတည်ပြီး အခြားအကောင်အထည်ဖော်မှုများတွင် အကန့်အသတ်မရှိ၊ ဘာသာစကားသတ်မှတ်ချက်သည် 3.7 ကတည်းက မှာယူမှုကို ထိန်းသိမ်းထားသည်။
OrderedDict ကို အမှာစာထိန်းသိမ်းထားသည့် အဘိဓာန်အဖြစ် စံစာကြည့်တိုက်၏ စုစည်းမှု module တွင် ပေးထားသည်။ ဤအရာကိုအသုံးပြုရန်အန္တရာယ်ကင်းသည်။
စုစည်းမှု module ကိုတင်သွင်းပါ။ ၎င်းကို စံစာကြည့်တိုက်တွင် ထည့်သွင်းထားပြီး ထည့်သွင်းရန် မလိုအပ်ပါ။
import collections
အောက်ပါတို့ကို ရေးသားပါက စုစည်းမှုများကို ချန်လှပ်နိုင်ပါသည်။ အောက်ပါဥပမာများတွင်။
from collections import OrderedDict
အောက်ပါတို့သည် OrderedDict ကိုအသုံးပြုပုံဖော်ပြချက်ဖြစ်ပါသည်။
- OrderedDict အရာဝတ္ထုတစ်ခုကို ဖန်တီးခြင်း။
- OrderedDict သည် အမိန့်အမျိုးအစားခွဲတစ်ခုဖြစ်သည်။
- အစိတ်အပိုင်းများကို အစ သို့မဟုတ် အဆုံးသို့ ရွှေ့ပါ။
- မည်သည့်အနေအထားတွင်မဆို အစိတ်အပိုင်းအသစ်တစ်ခုကို ထည့်ပါ။
- အစိတ်အပိုင်းများကို ပြန်စီရန် (ပြန်စီရန်)
- အစိတ်အပိုင်းများကို သော့ သို့မဟုတ် တန်ဖိုးဖြင့် စီပါ။
OrderedDict အရာဝတ္ထုတစ်ခုကို ဖန်တီးခြင်း။
တည်ဆောက်သူစုစည်းမှုများ။OrderedDict() ကို OrderedDict အရာဝတ္ထုတစ်ခုဖန်တီးရန် အသုံးပြုနိုင်သည်။
OrderedDict အလွတ်တစ်ခုကို ဖန်တီးပြီး တန်ဖိုးများထည့်ပါ။
od = collections.OrderedDict()
od['k1'] = 1
od['k2'] = 2
od['k3'] = 3
print(od)
# OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)])
တည်ဆောက်သူအား အကြောင်းပြချက်များကို သတ်မှတ်ရန်လည်း ဖြစ်နိုင်သည်။
သော့ချက်စကားလုံးအငြင်းအခုံများ၊ သော့တန်ဖိုးအတွဲများ (ဥပမာ tuples (သော့၊ တန်ဖိုး)) စသည်တို့ကို အသုံးပြုနိုင်ပါသည်။ ၎င်းသည် သော့တန်ဖိုးအတွဲဖြစ်သရွေ့ စာရင်းတစ်ခု သို့မဟုတ် tuple ဖြစ်နိုင်သည်။
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() method သို့ပေးပို့သော အဓိကစကားလုံးအငြင်းအခုံများကို ထိန်းသိမ်းထားသည်။
collections — Container datatypes — Python 3.10.0 Documentation
ပုံမှန်အဘိဓာန်များ (dict type objects) များကို တည်ဆောက်သူထံ ပေးပို့နိုင်သော်လည်း dict အမျိုးအစားသည် အမိန့်ကို မထိန်းသိမ်းနိုင်သော အကောင်အထည်ဖော်မှုများတွင်၊ ၎င်းမှထုတ်ပေးသော OrderedDict သည် အမှာစာကို ထိန်းသိမ်းထားမည်မဟုတ်ပါ။
print(collections.OrderedDict({'k1': 1, 'k2': 2, 'k3': 3}))
# OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)])
OrderedDict သည် အမိန့်အမျိုးအစားခွဲတစ်ခုဖြစ်သည်။
OrderedDict သည် အမိန့်အမျိုးအစားခွဲတစ်ခုဖြစ်သည်။
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)])
အသေးစိတ်အတွက် အောက်ပါဆောင်းပါးကို ကြည့်ပါ။
- ဆက်စပ်ဆောင်းပါးများ-အဘိဓာန်တစ်ခုသို့ အစိတ်အပိုင်းများထည့်ခြင်းနှင့် Python တွင် အဘိဓာန်များ ပေါင်းခြင်း။
အစိတ်အပိုင်းများကို အစ သို့မဟုတ် အဆုံးသို့ ရွှေ့ပါ။
အစိတ်အပိုင်းတစ်ခုကို အစ သို့မဟုတ် အဆုံးသို့ ရွှေ့ရန် 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() ကိုအသုံးပြု၍ items() method ဖြင့် ရရှိနိုင်သော view objects များကို စာရင်းပြုစုပါ။
- စာရင်း၏ထည့်သွင်းမှု() နည်းလမ်းတွင် သော့တန်ဖိုးအတွဲများ၏ tuple (သော့၊ တန်ဖိုး) တစ်ခုထည့်ပါ။
- ၎င်းကို constructor collections များသို့ပေးပို့ခြင်းဖြင့် အရာဝတ္ထုအသစ်တစ်ခုကို ဖန်တီးပါ။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() ကိုအသုံးပြု၍ items() method ဖြင့် ရရှိနိုင်သော view objects များကို စာရင်းပြုစုပါ။
- စာရင်းတစ်ခုတွင် အစိတ်အပိုင်းများကို အစားထိုးပါ။
- ၎င်းကို constructor collections များသို့ပေးပို့ခြင်းဖြင့် အရာဝတ္ထုအသစ်တစ်ခုကို ဖန်တီးပါ။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)])
အစိတ်အပိုင်းများကို သော့ သို့မဟုတ် တန်ဖိုးဖြင့် စီပါ။
items() method ဖြင့်ရရှိနိုင်သည့် view object ကို အခြေခံ၍ စီထားသော သော့တန်ဖိုးအတွဲများ (သော့၊ တန်ဖိုး) အတွဲများစာရင်းကို ဖန်တီးပြီး ၎င်းကို constructor collections များထံ ပေးပို့ပါ။OrderedDict() အရာဝတ္ထုအသစ်တစ်ခုကို ဖန်တီးပါ။
ထည့်သွင်းထားသော လုပ်ဆောင်ချက် အမျိုးအစား() ၏ argument key အဖြစ် tuple (သော့၊ တန်ဖိုး) မှ သော့ သို့မဟုတ် တန်ဖိုးကို ပြန်ပေးသည့် အမည်မသိ လုပ်ဆောင်ချက် (lambda စကားရပ်) ကို သတ်မှတ်ခြင်းဖြင့် စီခြင်းအား လုပ်ဆောင်သည်။
အစီအစဥ်ကို နောက်ပြန်လှည့်လိုပါက၊ စီထားသော () ၏ ပြောင်းပြန်အငြင်းအခုံကို အမှန်အဖြစ် သတ်မှတ်ပါ။
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)])