Meriv çawa OrderedDict, ferhengek fermankirî ya Python bikar tîne.

Dikan

Ferhengên Python (objeyên tîpa dict) rêza hêmanan naparêzin; CPython ji 3.6-ê vir ve wiya kiriye, lê ew di pêkanînên din de bi pêkanîn-girêdayî û ne diyar e; taybetmendiya zimanî ji 3.7-an vir ve rêzê parastiye.

OrderedDict di modula berhevokê ya pirtûkxaneya standard de wekî ferhengek ku rêzê diparêze tê peyda kirin. Bikaranîna vê yekê ewle ye.

Modula berhevokan derxînin. Ew di pirtûkxaneya standard de ye û ne hewce ye ku were saz kirin.

import collections

Ger hûn tiştên jêrîn binivîsin, hûn dikarin berhevokan derxînin. di mînakên jêrîn de.

from collections import OrderedDict

Li jêr şiroveyek e ku meriv çawa OrderedDict bikar tîne.

  • Afirandina objeyek OrderedDict
  • OrderedDict binklassek dictê ye
  • Hêmanan berbi destpêk an dawiyê ve bigerînin
  • Li her pozîsyonê hêmanek nû zêde bikin.
  • Ji nû ve rêzkirin (ji nû ve rêzkirin) hêmanan
  • Hêmanan li gorî mifteyê an nirxê rêz bikin

Afirandina objeyek OrderedDict

Koleksiyonên çêker.OrderedDict() dikare ji bo afirandina objeyek OrderedDict were bikar anîn.

Tiştek OrderedDict vala biafirînin û nirxan lê zêde bikin.

od = collections.OrderedDict()

od['k1'] = 1
od['k2'] = 2
od['k3'] = 3

print(od)
# OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)])

Di heman demê de gengaz e ku meriv argumanan ji çêker re diyar bike.

Hûn dikarin argumanên peyva key, rêzikên cotên key-nirx (wek tîpan (kilît, nirx)) û hwd. Heya ku ew cotek nirx-kilît be, ya paşîn dikare navnîşek an qutiyek be.

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)])

Heya guhertoya 3.5, rêza argumanên keywordê nehat parastin, lê ji ber guhertoya 3.6-ê, ew nuha tê parastin.

Di guhertoya 3.6-ê de hate guheztin: Bi pejirandina PEP 468, rêzika çêkerê OrderedDict û argumanên peyva sereke ku ji rêbaza nûvekirinê() re derbas bûne tê parastin.
collections — Container datatypes — Python 3.10.0 Documentation

Ferhengên normal (tiştên tîpa dîktatorê) jî dikarin ji çêkerê re werin derbas kirin, lê di derheqê pêkanînên ku tîpa dîktatorê rêzê naparêze, OrderedDict ku jê hatî çêkirin jî dê rêzê neparêze.

print(collections.OrderedDict({'k1': 1, 'k2': 2, 'k3': 3}))
# OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)])

OrderedDict binklassek dictê ye

OrderedDict binklassek dictê ye.

print(issubclass(collections.OrderedDict, dict))
# True

OrderedDict jî heman rêbazên wekî dictê hene, û rêbazên wergirtin, guhertin, zêdekirin û rakirina hêmanan wekî dict in.

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)])

Ji bo hûragahiyan li gotara jêrîn binêre.

Hêmanan berbi destpêk an dawiyê ve bigerînin

Hûn dikarin rêbaza OrderedDict-a xwe move_to_end() bikar bînin da ku hêmanek berbi destpêkê an jî dawiyê veguhezînin.

Miftê wekî argumana yekem diyar bikin. Vebijêrk ev e ku meriv berbi dawiyê ve biçe, lê heke argumana duyemîn a paşîn xelet be, ew ê berbi destpêkê ve were guheztin.

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)])

Li her pozîsyonê hêmanek nû zêde bikin.

Mimkun e ku meriv bi hêmanek nû ku li cîhek keyfî hatî zêdekirin tiştek OrderedDict-a nû biafirîne. Bi taybetî, ev dikare di herikîna jêrîn de were kirin.

  1. Tiştên dîtinê yên ku dikarin bi rêbaza hêman()-ê bi karanîna list()-ê werin bidestxistin navnîş bikin.
  2. Di rêbaza navnîşê ya navnîşê () de çend (kilît, nirx) cotên key-nirxê zêde bikin
  3. Tiştek nû çêbike bi derbaskirina wê ji berhevokên çêker re.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() pozîsyona ku wekî argumana yekem, û hêmana ku wekî argumana duyemîn were danîn destnîşan dike.

Di nimûneyê de, tiştekî nû ji guhêrbara orîjînal re tê veqetandin, û ti hêmanên nû li tiştê orîjînal bi xwe nayê zêdekirin.

Ji nû ve rêzkirin (ji nû ve rêzkirin) hêmanan

Veguheztina hêmanan heman pêvajo ye ku di mînaka li jor de ye.

  1. Tiştên dîtinê yên ku dikarin bi rêbaza hêman()-ê bi karanîna list()-ê werin bidestxistin navnîş bikin.
  2. Di lîsteyê de hêmanan biguherînin
  3. Tiştek nû çêbike bi derbaskirina wê ji berhevokên çêker re.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)])

Heke hûn dixwazin mifteyek diyar bikin û wê biguhezînin, rêbaza index() bikar bînin da ku index (pozîsyon) ji navnîşa bişkojkan wekî ku li jêr tê xuyang kirin bistînin.

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)])

Hêmanan li gorî mifteyê an nirxê rêz bikin

Lîsteya pirtikan (kilît, nirx) ji cotên kilît-nirxê yên rêzkirî li ser bingeha nesneya dîtinê ya ku bi rêbaza hêman()-ê dikare were bidestxistin, biafirîne û wê bigihîne berhevokên çêker.OrderedDict() ji bo afirandina tiştek nû.

Rêzkirin bi destnîşankirina fonksiyonek nenas (îfadekirina lambda) ku miftek an nirxek ji pirtikê (kilît, nirx) vedigerîne wekî mifteya argumana fonksiyona çêkirî ya sorted().

Ger tu dixwazî ​​rêzê berevajî bikî, argumana berevajî ya sorted() bikî rast.

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)])
Copied title and URL