Fjalorët Python (objekte të tipit dict) nuk ruajnë rendin e elementeve; CPython e ka bërë këtë që nga 3.6, por është i varur nga zbatimi dhe i pacaktuar në zbatime të tjera; specifikimi i gjuhës e ka ruajtur rendin që nga 3.7.
OrderedDict ofrohet në modulin e koleksioneve të bibliotekës standarde si një fjalor që ruan rendin. Është e sigurt për ta përdorur këtë.
Importoni modulin e koleksioneve. Është përfshirë në bibliotekën standarde dhe nuk ka nevojë të instalohet.
import collections
Nëse shkruani sa vijon, mund t’i hiqni koleksionet. në shembujt e mëposhtëm.
from collections import OrderedDict
Më poshtë është një përshkrim se si të përdorni OrderedDict.
- Krijimi i një objekti OrderedDict
- OrderedDict është një nënklasë e dict
- Zhvendosni elementët në fillim ose në fund
- Shtoni një element të ri në çdo pozicion.
- Rirregulloni (rirenditni) elementet
- Renditni elementët sipas çelësit ose vlerës
Krijimi i një objekti OrderedDict
Koleksionet e konstruktorit.OrderedDict() mund të përdoret për të krijuar një objekt OrderedDict.
Krijoni një objekt të zbrazët OrderedDict dhe shtoni vlera.
od = collections.OrderedDict()
od['k1'] = 1
od['k2'] = 2
od['k3'] = 3
print(od)
# OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)])
Është gjithashtu e mundur të specifikohen argumente për konstruktorin.
Ju mund të përdorni argumente fjalë kyçe, sekuenca të çifteve çelës-vlerë (të tilla si tuples (çelës, vlerë)) dhe kështu me radhë. Ky i fundit mund të jetë një listë ose një tuple për sa kohë që është një çift çelës-vlerë.
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)])
Deri në versionin 3.5, rendi i argumenteve të fjalëve kyçe nuk ishte ruajtur, por që nga versioni 3.6, tani është ruajtur.
Ndryshuar në versionin 3.6: Me pranimin e PEP 468, rendi i konstruktorit OrderedDict dhe argumentet e fjalëve kyçe të kaluara në metodën update() ruhet.
collections — Container datatypes — Python 3.10.0 Documentation
Fjalorët normalë (objektet e tipit dict) gjithashtu mund t’i kalohen konstruktorit, por në rastin e zbatimeve ku lloji dict nuk ruan rendin, OrderedDict i krijuar prej tij gjithashtu nuk do të ruajë rendin.
print(collections.OrderedDict({'k1': 1, 'k2': 2, 'k3': 3}))
# OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)])
OrderedDict është një nënklasë e dict
OrderedDict është një nënklasë e dict.
print(issubclass(collections.OrderedDict, dict))
# True
OrderedDict gjithashtu ka të njëjtat metoda si dict, dhe metodat për marrjen, ndryshimin, shtimin dhe heqjen e elementeve janë të njëjta si 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)])
Shikoni artikullin e mëposhtëm për detaje.
- Artikuj të ngjashëm:Shtimi i elementeve në një fjalor dhe bashkimi i fjalorëve në Python
Zhvendosni elementët në fillim ose në fund
Ju mund të përdorni metodën e vetë OrderedDict move_to_end() për të zhvendosur një element në fillim ose në fund.
Specifikoni çelësin si argumentin e parë. Parazgjedhja është të zhvendoset në fund, por nëse argumenti i dytë i fundit është false, ai do të zhvendoset në fillim.
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)])
Shtoni një element të ri në çdo pozicion.
Është e mundur të krijohet një objekt i ri OrderedDict me një element të ri të shtuar në një pozicion arbitrar. Konkretisht, kjo mund të bëhet në rrjedhën e mëposhtme.
- Listoni objektet e pamjes që mund të merren me metodën items() duke përdorur list().
- Shtoni një tuple (çelës, vlerë) të çifteve çelës-vlerë në metodën insert() të listës
- Krijo një objekt të ri duke ia kaluar koleksioneve të konstruktorit.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() specifikon pozicionin që do të futet si argument i parë dhe elementi që do të futet si argument i dytë.
Në shembull, një objekt i ri i caktohet ndryshores origjinale dhe asnjë element i ri nuk i shtohet vetë objektit origjinal.
Rirregulloni (rirenditni) elementet
Zëvendësimi i elementeve është i njëjti proces si në shembullin e mësipërm.
- Listoni objektet e pamjes që mund të merren me metodën items() duke përdorur list().
- Zëvendësoni elementet në një listë
- Krijo një objekt të ri duke ia kaluar koleksioneve të konstruktorit.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)])
Nëse dëshironi të specifikoni një çelës dhe ta zëvendësoni atë, përdorni metodën index() për të marrë indeksin (pozicionin) nga lista e çelësave siç tregohet më poshtë.
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)])
Renditni elementët sipas çelësit ose vlerës
Krijoni një listë me tuples (çelës, vlerë) të çifteve të renditura çelës-vlerë bazuar në objektin view që mund të merret me metodën e elementeve() dhe ia kaloni koleksionit të konstruktorit.OrderedDict() për të krijuar një objekt të ri.
Renditja kryhet duke specifikuar një funksion anonim (shprehje lambda) që kthen një çelës ose vlerë nga një tuple (çelës, vlerë) si çelësin e argumentit të funksionit të integruar sorted().
Nëse dëshironi të ndryshoni rendin, vendosni argumentin e kundërt të sorted() në true.
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)])