Python арқылы тапсырыс берген OrderedDict сөздігін қалай пайдалануға болады.

Іскерлік

Python сөздіктері (dict типті объектілер) элементтердің ретін сақтамайды; CPython мұны 3.6 нұсқасынан бастап жасады, бірақ ол іске асыруға тәуелді және басқа іске асыруларда шексіз; тіл спецификациясы 3.7-ден бастап тәртіпті сақтап қалды.

OrderedDict стандартты кітапхананың жинақтар модулінде тәртіпті сақтайтын сөздік ретінде берілген. Мұны пайдалану қауіпсіз.

Жинақтар модулін импорттаңыз. Ол стандартты кітапханаға енгізілген және орнатуды қажет етпейді.

import collections

Төмендегілерді жазсаңыз, жинақтарды өткізіп жіберуге болады. келесі мысалдарда.

from collections import OrderedDict

Төменде OrderedDict пайдалану жолының сипаттамасы берілген.

  • OrderedDict нысанын жасау
  • OrderedDict – dict ішкі класы
  • Элементтерді басына немесе соңына жылжытыңыз
  • Кез келген орынға жаңа элемент қосыңыз.
  • Элементтерді қайта реттеу (қайта реттеу).
  • Элементтерді кілт немесе мән бойынша сұрыптаңыз

OrderedDict нысанын жасау

Collections.OrderedDict() конструкторын OrderedDict нысанын жасау үшін пайдалануға болады.

Бос OrderedDict нысанын жасаңыз және мәндерді қосыңыз.

od = collections.OrderedDict()

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

print(od)
# 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)]))
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)])

3.5 нұсқасына дейін кілт сөз аргументтерінің реті сақталмады, бірақ 3.6 нұсқасынан бастап ол қазір сақталады.

3.6 нұсқасында өзгертілген: PEP 468 қабылданған кезде OrderedDict конструкторының реті және update() әдісіне берілген кілт сөз аргументтері сақталады.
collections — Container datatypes — Python 3.10.0 Documentation

Қалыпты сөздіктерді (dict типті нысандар) да конструкторға беруге болады, бірақ dict түрі тәртіпті сақтамайтын іске асыру жағдайында одан жасалған OrderedDict де ретті сақтамайды.

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

OrderedDict – dict ішкі класы

OrderedDict – dict ішкі класы.

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

OrderedDict де dict сияқты әдістерге ие және элементтерді алу, өзгерту, қосу және жою әдістері 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)])

Мәліметтер алу үшін келесі мақаланы қараңыз.

Элементтерді басына немесе соңына жылжытыңыз

Элементті басына немесе соңына жылжыту үшін OrderedDict бағдарламасының move_to_end() әдісін пайдалануға болады.

Бірінші аргумент ретінде кілтті көрсетіңіз. Әдепкі – соңына дейін жылжыту, бірақ соңғы екінші аргумент жалған болса, ол басына жылжытылады.

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

Кез келген орынға жаңа элемент қосыңыз.

Жаңа OrderedDict нысанын еркін позицияға қосылған жаңа элементпен жасауға болады. Атап айтқанда, мұны келесі ағында жасауға болады.

  1. list() арқылы items() әдісімен алуға болатын көрініс нысандарын тізімдеңіз.
  2. Тізімнің insert() әдісіне кілт-мән жұптарының кортежін (кілт, мән) қосыңыз
  3. Жаңа нысанды конструктор коллекцияларына беру арқылы жасаңыз.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() бірінші аргумент ретінде кірістірілетін орынды, ал екінші аргумент ретінде кірістірілетін элементті көрсетеді.

Мысалда жаңа нысан бастапқы айнымалыға тағайындалған және бастапқы нысанның өзіне жаңа элементтер қосылмаған.

Элементтерді қайта реттеу (қайта реттеу).

Элементтерді ауыстыру жоғарыдағы мысалдағыдай процесс.

  1. list() арқылы items() әдісімен алуға болатын көрініс нысандарын тізімдеңіз.
  2. Тізімдегі элементтерді ауыстырыңыз
  3. Жаңа нысанды конструктор коллекцияларына беру арқылы жасаңыз.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)])

Егер кілтті көрсетіп, оны ауыстырғыңыз келсе, төменде көрсетілгендей кілттер тізімінен индексті (позицияны) алу үшін index() әдісін пайдаланыңыз.

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

Элементтерді кілт немесе мән бойынша сұрыптаңыз

items() әдісімен алуға болатын көрініс нысаны негізінде сұрыпталған кілт-мән жұптарының кортеждерінің (кілт, мән) тізімін жасаңыз және жаңа нысан жасау үшін оны коллекциялар.OrderedDict() конструкторына өткізіңіз.

Сұрыптау кіріктірілген функцияның аргумент кілті ретінде кортежнен (кілт, мән) кілтті немесе мәнді қайтаратын анонимді функцияны (лямбда өрнегі) көрсету арқылы орындалады.

Егер сіз тәртіпті өзгерткіңіз келсе, sorted() кері аргументін шын мәніне орнатыңыз.

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