វចនានុក្រម 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)])
វាក៏អាចបញ្ជាក់អាគុយម៉ង់ទៅ constructor ផងដែរ។
អ្នកអាចប្រើអំណះអំណាងពាក្យគន្លឹះ លំដាប់នៃគូតម្លៃគន្លឹះ (ដូចជា tuples (key, value)) ជាដើម។ ក្រោយមកទៀតអាចជាបញ្ជី ឬ 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 constructor និងអាគុយម៉ង់ពាក្យគន្លឹះដែលបានបញ្ជូនទៅវិធីសាស្ត្រ update() ត្រូវបានរក្សាទុក។
collections — Container datatypes — Python 3.10.0 Documentation
វចនានុក្រមធម្មតា (វត្ថុប្រភេទ dict) ក៏អាចត្រូវបានបញ្ជូនទៅអ្នកសាងសង់ផងដែរ ប៉ុន្តែក្នុងករណីការអនុវត្តដែលប្រភេទ 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)])
សូមមើលអត្ថបទខាងក្រោមសម្រាប់ព័ត៌មានលម្អិត។
- អត្ថបទដែលទាក់ទង:ការបន្ថែមធាតុទៅវចនានុក្រម និងការភ្ជាប់វចនានុក្រមនៅក្នុង 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 ថ្មីជាមួយនឹងធាតុថ្មីដែលបានបន្ថែមនៅទីតាំងបំពាន។ ជាពិសេស នេះអាចត្រូវបានធ្វើនៅក្នុងលំហូរខាងក្រោម។
- រាយវត្ថុទិដ្ឋភាពដែលអាចទទួលបានដោយប្រើវិធីសាស្ត្រ items() ដោយប្រើ list() ។
- បន្ថែម tuple (key, value) នៃ key-value pairs នៅក្នុងវិធី insert() របស់បញ្ជី
- បង្កើតវត្ថុថ្មីដោយបញ្ជូនវាទៅ 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() បញ្ជាក់ទីតាំងដែលត្រូវបញ្ចូលជាអាគុយម៉ង់ទីមួយ ហើយធាតុដែលត្រូវបញ្ចូលជាអាគុយម៉ង់ទីពីរ។
ក្នុងឧទាហរណ៍ វត្ថុថ្មីត្រូវបានកំណត់ទៅអថេរដើម ហើយគ្មានធាតុថ្មីត្រូវបានបន្ថែមទៅវត្ថុដើមនោះទេ។
រៀបចំឡើងវិញ (តម្រៀបឡើងវិញ) ធាតុ
ការជំនួសធាតុគឺជាដំណើរការដូចគ្នាដូចក្នុងឧទាហរណ៍ខាងលើ។
- រាយវត្ថុទិដ្ឋភាពដែលអាចទទួលបានដោយប្រើវិធីសាស្ត្រ items() ដោយប្រើ list() ។
- ជំនួសធាតុនៅក្នុងបញ្ជីមួយ។
- បង្កើតវត្ថុថ្មីដោយបញ្ជូនវាទៅ 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)])
តម្រៀបធាតុតាមគន្លឹះ ឬតម្លៃ
បង្កើតបញ្ជីនៃ tuples (key, value) នៃគូ key-value ដែលត្រូវបានតម្រៀបដោយផ្អែកលើ view object ដែលអាចទទួលបានដោយ items() method ហើយបញ្ជូនវាទៅ constructor collections.OrderedDict() ដើម្បីបង្កើត object ថ្មី។
ការតម្រៀបត្រូវបានអនុវត្តដោយបញ្ជាក់មុខងារអនាមិក (កន្សោម lambda) ដែលត្រឡប់សោ ឬតម្លៃពី tuple (កូនសោតម្លៃ) ជាកូនសោអាគុយម៉ង់នៃមុខងារដែលបានតម្រៀបក្នុងស្រាប់។
ប្រសិនបើអ្នកចង់បញ្ច្រាសលំដាប់ សូមកំណត់អាគុយម៉ង់បញ្ច្រាសនៃតម្រៀប() ទៅពិត។
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)])