Питхон речници (објекти типа дицт) не чувају редослед елемената; ЦПитхон то ради од 3.6, али је зависан од имплементације и неодређен је у другим имплементацијама; спецификација језика је сачувала ред од 3.7.
ОрдередДицт је обезбеђен у модулу колекција стандардне библиотеке као речник који чува редослед. Ово је безбедно користити.
Увезите модул колекција. Укључен је у стандардну библиотеку и није га потребно инсталирати.
import collections
Ако напишете следеће, можете да изоставите колекције. у следећим примерима.
from collections import 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: Са прихватањем ПЕП 468, сачуван је редослед конструктора ОрдередДицт и аргумената кључних речи који су прослеђени методи упдате().
collections — Container datatypes — Python 3.10.0 Documentation
Нормални речници (објекти типа дицт) се такође могу пренети конструктору, али у случају имплементација где тип дицт не чува ред, ОрдередДицт генерисан из њега такође неће сачувати ред.
print(collections.OrderedDict({'k1': 1, 'k2': 2, 'k3': 3}))
# OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)])
ОрдередДицт је подкласа дицт
ОрдередДицт је подкласа дицт.
print(issubclass(collections.OrderedDict, dict))
# True
ОрдередДицт такође има исте методе као дицт, а методе за добијање, промену, додавање и уклањање елемената су исте као и дицт.
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)])
За детаље погледајте следећи чланак.
- Повезани чланци:Додавање елемената у речник и спајање речника у Питхон-у
Померите елементе на почетак или крај
Можете користити сопствени метод ОрдередДицт мове_то_енд() да преместите елемент на почетак или крај.
Наведите кључ као први аргумент. Подразумевано је да се пређе на крај, али ако је последњи аргумент нетачан, биће померен на почетак.
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)])
Додајте нови елемент на било коју позицију.
Могуће је креирати нови ОрдередДицт објекат са новим елементом додатим на произвољној позицији. Конкретно, то се може урадити у следећем току.
- Наведите објекте приказа који се могу добити методом итемс() помоћу листе().
- Додајте скуп (кључ, вредност) парова кључ/вредност у методу инсерт() листе
- Направите нови објекат тако што ћете га проследити у конструктор цоллецтионс.ОрдередДицт()
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)])
инсерт() специфицира позицију која ће бити уметнута као први аргумент, а елемент који ће бити уметнут као други аргумент.
У примеру, нови објекат је додељен оригиналној променљивој, а самом оригиналном објекту се не додају нови елементи.
Преуредите (преуредите) елементе
Замена елемената је исти процес као у горњем примеру.
- Наведите објекте приказа који се могу добити методом итемс() помоћу листе().
- Замените елементе на листи
- Направите нови објекат тако што ћете га проследити у конструктор цоллецтионс.ОрдередДицт()
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)])
Ако желите да наведете кључ и замените га, користите метод индек() да бисте добили индекс (позицију) са листе кључева као што је приказано испод.
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)])
Сортирајте елементе по кључу или вредности
Направите листу торки (кључ, вредност) сортираних парова кључ-вредност на основу објекта приказа који се може добити методом итемс() и проследите је конструктору цоллецтионс.ОрдередДицт() да бисте креирали нови објекат.
Сортирање се врши навођењем анонимне функције (ламбда израз) која враћа кључ или вредност из тупле (кључ, вредност) као кључ аргумента уграђене функције сортед().
Ако желите да обрнете редослед, поставите обрнути аргумент сортед() на труе.
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)])