Python sifarişli lüğəti OrderedDict-dən necə istifadə etmək olar.

Biznes

Python lüğətləri (dict tipli obyektlər) elementlərin sırasını saxlamır; CPython bunu 3.6-dan bəri edir, lakin digər tətbiqlərdə icradan asılıdır və qeyri-müəyyəndir; dil spesifikasiyası 3.7-dən bəri sıranı qoruyub saxlayır.

OrderedDict standart kitabxananın kolleksiyalar modulunda sifarişi qoruyan lüğət kimi təqdim olunur. Bunu istifadə etmək təhlükəsizdir.

Kolleksiya modulunu idxal edin. O, standart kitabxanaya daxildir və quraşdırılmasına ehtiyac yoxdur.

import collections

Aşağıdakıları yazsanız, kolleksiyaları buraxa bilərsiniz. aşağıdakı nümunələrdə.

from collections import OrderedDict

Aşağıda OrderedDict-dən istifadənin təsviri verilmişdir.

  • OrderedDict obyektinin yaradılması
  • OrderedDict dict-in alt sinfidir
  • Elementləri əvvəlinə və ya sonuna köçürün
  • İstənilən mövqedə yeni element əlavə edin.
  • Elementləri yenidən təşkil edin (yenidən sıralayın).
  • Elementləri açar və ya dəyərə görə sıralayın

OrderedDict obyektinin yaradılması

Konstruktor kolleksiyaları.OrderedDict() OrderedDict obyektini yaratmaq üçün istifadə edilə bilər.

Boş OrderedDict obyekti yaradın və dəyərlər əlavə edin.

od = collections.OrderedDict()

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

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

Konstruktora arqumentlər təyin etmək də mümkündür.

Siz açar söz arqumentlərindən, açar-dəyər cütlərinin ardıcıllığından (məsələn, dəstlər (açar, dəyər)) və s. istifadə edə bilərsiniz. Sonuncu, açar-dəyər cütü olduğu müddətcə siyahı və ya tuple ola bilər.

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 versiyasına qədər açar söz arqumentlərinin sırası qorunmadı, lakin 3.6 versiyasından bəri indi qorunur.

3.6 versiyasında dəyişdirilib: PEP 468-in qəbulu ilə OrderedDict konstruktorunun sırası və update() metoduna ötürülən açar söz arqumentləri qorunub saxlanılır.
collections — Container datatypes — Python 3.10.0 Documentation

Normal lüğətlər (dict tipli obyektlər) də konstruktora ötürülə bilər, lakin dict tipinin nizamı qorumadığı tətbiqlər zamanı ondan yaradılan OrderedDict də nizamı qorumayacaq.

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

OrderedDict dict-in alt sinfidir

OrderedDict dict-in alt sinfidir.

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

OrderedDict də dict ilə eyni üsullara malikdir və elementləri əldə etmək, dəyişdirmək, əlavə etmək və silmək üsulları dict ilə eynidir.

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

Təfərrüatlar üçün aşağıdakı məqaləyə baxın.

Elementləri əvvəlinə və ya sonuna köçürün

Elementi əvvələ və ya sona köçürmək üçün OrderedDict-in öz move_to_end() metodundan istifadə edə bilərsiniz.

Açarı ilk arqument kimi göstərin. Defolt olaraq sona keçməkdir, lakin sonuncu olan ikinci arqument yanlışdırsa, başlanğıca köçürüləcək.

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

İstənilən mövqedə yeni element əlavə edin.

İxtiyari mövqedə əlavə edilmiş yeni elementlə yeni OrderedDict obyekti yaratmaq mümkündür. Konkret olaraq, bu, aşağıdakı axınla edilə bilər.

  1. list() funksiyasından istifadə edərək items() metodu ilə əldə edilə bilən görünüş obyektlərini sadalayın.
  2. Siyahının insert() metodunda açar-dəyər cütlərindən ibarət dəst (açar, dəyər) əlavə edin
  3. Konstruktor kolleksiyalarına ötürməklə yeni obyekt yaradın.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() birinci arqument kimi daxil ediləcək mövqeyi və ikinci arqument kimi daxil ediləcək elementi təyin edir.

Nümunədə orijinal dəyişənə yeni obyekt təyin edilir və orijinal obyektin özünə heç bir yeni element əlavə edilmir.

Elementləri yenidən təşkil edin (yenidən sıralayın).

Elementlərin dəyişdirilməsi yuxarıdakı nümunədə olduğu kimi eyni prosesdir.

  1. list() funksiyasından istifadə edərək items() metodu ilə əldə edilə bilən görünüş obyektlərini sadalayın.
  2. Siyahıdakı elementləri dəyişdirin
  3. Konstruktor kolleksiyalarına ötürməklə yeni obyekt yaradın.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)])

Əgər açarı təyin etmək və onu əvəz etmək istəyirsinizsə, aşağıda göstərildiyi kimi düymələr siyahısından indeksi (mövqeyi) almaq üçün index() metodundan istifadə edin.

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

Elementləri açar və ya dəyərə görə sıralayın

items() metodu ilə əldə edilə bilən görünüş obyekti əsasında çeşidlənmiş açar-dəyər cütlərinin cərgələrinin (açar, dəyər) siyahısını yaradın və yeni obyekt yaratmaq üçün onu collections.OrderedDict() konstruktoruna ötürün.

Çeşidləmə daxili funksiyanın arqument açarı kimi dəstdən (açar, dəyər) açar və ya dəyəri qaytaran anonim funksiyanı (lambda ifadəsi) təyin etməklə həyata keçirilir.

Əgər sıranı geri qaytarmaq istəyirsinizsə, sorted() funksiyasının tərs arqumentini doğru olaraq təyin edin.

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