Understanding Collections In Python

2426 views Oct 30, 2024

ကျွန်တော်တို့ ဒီနေ့မှာတော့ beginners တွေအနေနဲ့ နောက်ပိုင်းမှာ လုံးဝအသုံးဝင်လာမယ့် collections ကိုလေ့လာကြည့်ရအောင်။ကျွန်တော်လဲ အလုပ်တွေနဲ့ ရှုပ်နေ တော့ blog မှာ ပို့စ်သိပ်မတင်ဖြစ်တာတွက် sorry ပါ။

namedtuple

အဲ့တော့ ပထမဆုံး namedtuple ကိုကြည့် ရအောင် namedtuple ဆိုတယ့်တိုင်းပဲ tuple ကို name တွေနဲ့လာတာပါ။အောက်က example ကိုကြည့်ကြည့်ပါ

>>> pyrobocity = namedtuple("Pyrobocity","name,links")
>>> p1 = pyrobocity("sithuphyo","https://pyrobocity.com")
>>> p1
Pyrobocity(name='sithuphyo', links='https://pyrobocity.com')
>>> p1.name
'sithuphyo'

pyrobocity ဆိုတယ့် namedtuple object လေးကိုဆောက်လိုက်ပါတယ်။ဒီနေရာမှာ သိထားရမှာက namedtuple သည် နှစ်ခုလက်ခံပါတယ် class name နဲ့ သူ့ရဲ့ attribute တွေပါ။အဲ့တော့ example ကိုကြည့်လိုက်ရုံနဲ့ နားလည်နေပြီလို့ထင်ပါတယ်။p1.name ဆိုပြီး ကိုလိုချင်တဲ့ value ကို name နဲ့ခေါ်လို့ရတော့ ပိုအဆင်ပြေပါတယ်။ဒီမှာတော့ နားလည်လွယ်အောင် အရှည်တွေမရေးပြတော့ပါဘူး။

အဲ့တော့အထဲက တန်ဖိုးတွေကို ချိန်းချင်တယ်ဆိုလဲ လွယ်ပါတယ်။

>>> p2 = p1._replace(name="sithu") 
>>> p2 
Pyrobocity(name='sithu', links='https://pyrobocity.com') 
>>> p2.name 
'sithu'

_replace လေးသုံးပြီး ချိန်းယုံပါပဲ။ဒါမှမဟုတ် list ကနေပြောင်းချင်တယ်ဆိုလဲ pyrobocity._make([]) ဆိုပြီး မိတ်ဆွေရဲ့ list ကိုချိန်းနိုင်ပါတယ်။

Counter

Counter ကတော့ တော်တော်သိထားသင့်ပါတယ်။ကျွန်တော်တို့ နောက်ပိုင်း datascience ပဲဖြစ်ဖြစ် NLP မှာ ဆိုရင်လဲ word count တွေ ဆိုလဲ အလွယ်တကူလုပ်လို့ရပါတယ်။

>>> from collections import Counter
>>> mylist = ["a","c","c","a","b","a","a","b","c"]
>>> counts = Counter(mylist)
>>> counts
Counter({'a': 4, 'c': 3, 'b': 2})
>>> counts.items()
dict_items([('a', 4), ('c', 3), ('b', 2)])

example ကိုကြည့်လိုက်ရင် Counter ထဲထည့်လိုက်တာနဲ့ count လုပ်ပေးသွားတာကို တွေ့ရမှာပါ။

defaultdict

ဒါလေးကတော့ သာမန် dictionary လိုမျိုးပါပဲ။keyerror မတက်တာလေးပဲကွာတာပါ။

>>> from collections import defaultdict
>>> data = defaultdict(int)
>>> data['k1'] = 'apple'
>>> data['k2'] = 'orange'
>>> data['k1']
'apple'
>>> data['k2']
'orange'
>>> data['k3']
0

ဒီနေရာမှာ မရှိတဲ့ key နဲ့ခေါ်တဲ့ အခါ 0 ထွက်လာတာတွေ့ရမှာပါ။ဘာကြောင့်လဲဆိုတော့ int နဲ့ တည်ဆောက်ထားလို့ပါ။သာမန် dictionary ဆို မရှိတာနဲ့ ခေါ်ရင် keyerror တက်လာပါလိမ့်မယ်။

ဒါလေးပါပဲ ordereddict တွေကလဲ နောက်ပိုင်း python version တွေမှာ insertion order ကို လိုက်နာလာကြပါပြီ။တခြားဟာလေးတွေတော့ရှိပါသေးတယ်။ကျွန်တော်တော့ သိပ်မသုံးဖြစ်လို့နောက်မှ တင်ပေးပါ့မယ်။ကျေးဇူးတင်ပါတယ်။