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.
- Nakala Zinazohusiana:Kuongeza vipengele kwenye kamusi na kujiunga na kamusi katika Python
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.
- Orodhesha vitu vya kutazama ambavyo vinaweza kupatikana kwa vitu () njia kwa kutumia list().
- Ongeza tuple (ufunguo, thamani) ya jozi za thamani-msingi katika mbinu ya orodha ya insert().
- 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.
- Orodhesha vitu vya kutazama ambavyo vinaweza kupatikana kwa vitu () njia kwa kutumia list().
- Badilisha vipengele kwenye orodha
- 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)])