Jinsi ya kutumia OrderedDict, kamusi iliyoamuru ya Python.

Biashara

Kamusi za Python (vitu vya aina ya dict) hazihifadhi mpangilio wa vipengele; CPython imefanya hivyo tangu 3.6, lakini inategemea-utekelezaji na haina ukomo katika utekelezaji mwingine; uainisho wa lugha umehifadhi mpangilio tangu 3.7.

OrderedDict imetolewa katika sehemu ya makusanyo ya maktaba ya kawaida kama kamusi inayohifadhi mpangilio. Ni salama kutumia hii.

Ingiza moduli ya makusanyo. Imejumuishwa kwenye maktaba ya kawaida na haihitaji kusakinishwa.

import collections

Ukiandika yafuatayo, unaweza kuacha makusanyo. katika mifano ifuatayo.

from collections import OrderedDict

Yafuatayo ni maelezo ya jinsi ya kutumia OrderedDict.

  • Inaunda kipengee cha OrderedDict
  • OrderedDict ni aina ndogo ya dict
  • Sogeza vipengele hadi mwanzo au mwisho
  • Ongeza kipengele kipya katika nafasi yoyote.
  • Panga upya (panga upya) vipengele
  • Panga vipengele kwa ufunguo au thamani

Inaunda kipengee cha OrderedDict

Kijenzi collections.OrderedDict() kinaweza kutumika kuunda kitu cha OrderedDict.

Unda kitu tupu cha OrderedDict na uongeze maadili.

od = collections.OrderedDict()

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

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

Inawezekana pia kutaja hoja kwa mjenzi.

Unaweza kutumia hoja za maneno msingi, mfuatano wa jozi za thamani-msingi (kama vile nakala (ufunguo, thamani)), na kadhalika. Mwisho unaweza kuwa orodha au tuple mradi tu ni jozi ya thamani-msingi.

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

Hadi toleo la 3.5, utaratibu wa hoja za maneno haukuhifadhiwa, lakini tangu toleo la 3.6, sasa limehifadhiwa.

Imebadilishwa katika toleo la 3.6: Kwa kukubalika kwa PEP 468, mpangilio wa kijenzi cha OrderedDict na hoja za nenomsingi zilizopitishwa kwa njia ya kusasisha() huhifadhiwa.
collections — Container datatypes — Python 3.10.0 Documentation

Kamusi za kawaida (vitu vya aina ya dict) pia vinaweza kupitishwa kwa mjenzi, lakini katika kesi ya utekelezaji ambapo aina ya dict haihifadhi utaratibu, OrderedDict inayotokana nayo pia haitahifadhi utaratibu.

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

OrderedDict ni aina ndogo ya dict

OrderedDict ni aina ndogo ya dict.

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

OrderedDict pia ina mbinu sawa na dict, na mbinu za kupata, kubadilisha, kuongeza, na kuondoa vipengele ni sawa na 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)])

Tazama makala ifuatayo kwa maelezo zaidi.

Sogeza vipengele hadi mwanzo au mwisho

Unaweza kutumia njia ya OrderedDict mwenyewe move_to_end() kusogeza kipengee hadi mwanzo au mwisho.

Bainisha ufunguo kama hoja ya kwanza. Chaguo-msingi ni kusonga hadi mwisho, lakini ikiwa hoja ya pili ya mwisho ni ya uwongo, itahamishwa hadi mwanzo.

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

Ongeza kipengele kipya katika nafasi yoyote.

Inawezekana kuunda kipengee kipya cha OrderedDict na kipengee kipya kilichoongezwa kwa nafasi ya kiholela. Hasa, hii inaweza kufanywa kwa mtiririko ufuatao.

  1. Orodhesha vitu vya kutazama ambavyo vinaweza kupatikana kwa vitu () njia kwa kutumia list().
  2. Ongeza tuple (ufunguo, thamani) ya jozi za thamani-msingi katika mbinu ya orodha ya insert().
  3. Unda kitu kipya kwa kuipitisha kwa mkusanyiko wa wajenzi.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() inabainisha nafasi ya kuingizwa kama hoja ya kwanza, na kipengele cha kuingizwa kama hoja ya pili.

Katika mfano, kitu kipya kimepewa utofauti wa asili, na hakuna vitu vipya vinaongezwa kwa kitu cha asili yenyewe.

Panga upya (panga upya) vipengele

Kubadilisha vipengele ni mchakato sawa na katika mfano hapo juu.

  1. Orodhesha vitu vya kutazama ambavyo vinaweza kupatikana kwa vitu () njia kwa kutumia list().
  2. Badilisha vipengele kwenye orodha
  3. Unda kitu kipya kwa kuipitisha kwa mkusanyiko wa wajenzi.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)])

Ikiwa unataka kutaja ufunguo na ubadilishe, tumia njia ya index() kupata fahirisi (nafasi) kutoka kwenye orodha ya vitufe kama inavyoonyeshwa hapa chini.

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

Panga vipengele kwa ufunguo au thamani

Unda orodha ya nakala (ufunguo, thamani) ya jozi za thamani-ufunguo zilizopangwa kulingana na kitu cha kutazama kinachoweza kupatikana kwa njia ya items(), na uipitishe kwa mkusanyiko wa wajenzi.OrderedDict() ili kuunda kitu kipya.

Upangaji unafanywa kwa kubainisha chaguo la kukokotoa lisilojulikana ( usemi wa lambda) ambao hurejesha ufunguo au thamani kutoka kwa tuple (ufunguo, thamani) kama ufunguo wa hoja wa chaguo za kukokotoa zilizojumuishwa ndani zilizopangwa ().

Ikiwa unataka kubadilisha mpangilio, weka hoja ya nyuma ya sorted() kuwa kweli.

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