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.
- Gotarên Têkildar:Zêdekirina hêmanan li ferhengekê û tevlêbûna ferhengan di Python de
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.
- Tiştên dîtinê yên ku dikarin bi rêbaza hêman()-ê bi karanîna list()-ê werin bidestxistin navnîş bikin.
- Di rêbaza navnîşê ya navnîşê () de çend (kilît, nirx) cotên key-nirxê zêde bikin
- 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.
- Tiştên dîtinê yên ku dikarin bi rêbaza hêman()-ê bi karanîna list()-ê werin bidestxistin navnîş bikin.
- Di lîsteyê de hêmanan biguherînin
- 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)])