පයිතන් ශබ්දකෝෂ (ආඛ්යාත වර්ගයේ වස්තූන්) මූලද්රව්යවල අනුපිළිවෙල ආරක්ෂා නොකරයි; 3.6 සිට CPython එසේ කර ඇත, නමුත් එය ක්රියාත්මක කිරීම මත රඳා පවතින අතර අනෙකුත් ක්රියාත්මක කිරීම් වලදී අවිනිශ්චිත වේ; භාෂා පිරිවිතරය 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
සාමාන්ය ශබ්දකෝෂ (ඩික්ට් වර්ගයේ වස්තු) ද කන්ස්ට්රක්ටරය වෙත ලබා දිය හැකි නමුත්, ඩික්ට් ටයිප් එක පිළිවෙළ ආරක්ෂා නොකරන ක්රියාත්මක කිරීම් වලදී, එයින් උත්පාදනය කරන ලද ඕඩර්ඩික්ට් ද පිළිවෙල ආරක්ෂා නොකරයි.
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() භාවිතා කර අයිතම() ක්රමය සමඟ ලබා ගත හැකි view objects ලැයිස්තුගත කරන්න.
- ලැයිස්තුවේ ඇතුළු කිරීම() ක්රමය තුළ යතුරු අගය යුගලවල ටියුපල් (යතුර, අගය) එක් කරන්න
- කන්ස්ට්රක්ටර් එකතුවට යැවීමෙන් නව වස්තුවක් සාදන්න.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() භාවිතා කර අයිතම() ක්රමය සමඟ ලබා ගත හැකි view objects ලැයිස්තුගත කරන්න.
- ලැයිස්තුවක ඇති මූලද්රව්ය ප්රතිස්ථාපනය කරන්න
- කන්ස්ට්රක්ටර් එකතුවට යැවීමෙන් නව වස්තුවක් සාදන්න.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() හි ප්රතිලෝම තර්කය සත්ය ලෙස සකසන්න.
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)])