Carane nggunakake OrderedDict, a Python dhawuh kamus.

Bisnis

Kamus Python (obyek saka jinis dict) ora njaga urutan unsur; CPython wis rampung wiwit 3.6, nanging gumantung ing implementasine lan ora mesthi ing implementasine liyane; specification basa wis wadi urutan wiwit 3.7.

OrderedDict kasedhiya ing modul koleksi perpustakaan standar minangka kamus sing njaga urutan kasebut. Iku aman kanggo nggunakake iki.

Impor modul koleksi. Iki kalebu ing perpustakaan standar lan ora perlu diinstal.

import collections

Yen sampeyan nulis ing ngisor iki, sampeyan bisa ngilangi koleksi kasebut. ing conto ing ngisor iki.

from collections import OrderedDict

Ing ngisor iki minangka katrangan babagan cara nggunakake OrderedDict.

  • Nggawe obyek OrderedDict
  • OrderedDict minangka subclass saka dict
  • Pindhah unsur menyang wiwitan utawa pungkasan
  • Tambah unsur anyar ing sembarang posisi.
  • Ngatur maneh (nyusun ulang) unsur
  • Urut unsur miturut kunci utawa nilai

Nggawe obyek OrderedDict

Konstruktor collections.OrdedDict () bisa digunakake kanggo nggawe obyek OrderedDict.

Nggawe obyek OrderedDict kosong lan nambah nilai.

od = collections.OrderedDict()

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

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

Sampeyan uga bisa nemtokake argumen kanggo konstruktor.

Sampeyan bisa nggunakake argumen tembung kunci, urutan pasangan kunci-nilai (kayata tuples (kunci, nilai)), lan liya-liyane. Sing terakhir bisa dadi dhaptar utawa tuple anggere minangka pasangan kunci-nilai.

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

Nganti versi 3.5, urutan argumen tembung kunci ora disimpen, nanging wiwit versi 3.6, saiki wis disimpen.

Diowahi ing versi 3.6: Kanthi ditampa PEP 468, urutan konstruktor OrderedDict lan argumen tembung kunci sing diterusake menyang cara nganyari () dilestarekake.
collections — Container datatypes — Python 3.10.0 Documentation

Kamus normal (obyek jinis dict) uga bisa diterusake menyang konstruktor, nanging ing kasus implementasi ing ngendi jinis dict ora ngreksa urutan, OrderedDict sing digawe saka iku uga ora bakal njaga urutan.

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

OrderedDict minangka subclass saka dict

OrderedDict minangka subclass saka dict.

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

OrderedDict uga nduweni cara sing padha karo dict, lan cara kanggo njupuk, ngganti, nambah, lan mbusak unsur padha karo 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)])

Deleng artikel ing ngisor iki kanggo rincian.

Pindhah unsur menyang wiwitan utawa pungkasan

Sampeyan bisa nggunakake cara dhewe OrderedDict move_to_end () kanggo mindhah unsur menyang awal utawa pungkasan.

Nemtokake kunci minangka argumen pisanan. Default iku kanggo pindhah menyang mburi, nanging yen argumen kapindho pungkasan iku palsu, iku bakal dipindhah menyang wiwitan.

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

Tambah unsur anyar ing sembarang posisi.

Sampeyan bisa nggawe obyek OrderedDict anyar kanthi unsur anyar sing ditambahake ing posisi sing sewenang-wenang. Secara khusus, iki bisa ditindakake ing alur ing ngisor iki.

  1. Dhaftar obyek tampilan sing bisa dipikolehi karo item () cara nggunakake dhaftar ().
  2. Tambah tuple (kunci, nilai) saka pasangan kunci-nilai ing cara insert () dhaftar
  3. Nggawe obyek anyar kanthi ngliwati koleksi konstruktor.OrdedDict()
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 () nemtokake posisi sing bakal dilebokake minangka argumen pisanan, lan unsur sing bakal dilebokake minangka argumen kapindho.

Ing contone, obyek anyar ditugasake menyang variabel asli, lan ora ana unsur anyar sing ditambahake menyang obyek asli kasebut.

Ngatur maneh (nyusun ulang) unsur

Ngganti unsur minangka proses sing padha karo conto ing ndhuwur.

  1. Dhaftar obyek tampilan sing bisa dipikolehi karo item () cara nggunakake dhaftar ().
  2. Ganti unsur ing dhaptar
  3. Nggawe obyek anyar kanthi ngliwati koleksi konstruktor.OrdedDict()
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)])

Yen sampeyan pengin nemtokake tombol lan ngganti, nggunakake indeks () cara kanggo njaluk indeks (posisi) saka dhaftar tombol minangka kapacak ing ngisor iki.

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

Urut unsur miturut kunci utawa nilai

Nggawe dhaptar tuples (tombol, Nilai) diurutake pasangan tombol-nilai adhedhasar obyek tampilan sing bisa dipikolehi dening item () cara, lan pass menyang konstruktor collections.OrderedDict () kanggo nggawe obyek anyar.

Ngurutake dileksanakake kanthi nemtokake fungsi anonim (ekspresi lambda) sing ngasilake kunci utawa nilai saka tuple (tombol, nilai) minangka tombol argumen saka fungsi sing dibangun diurutake ().

Yen sampeyan pengin mbalikke urutan, nyetel bantahan mbalikke saka diurutake () kanggo bener.

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