Traffine I/O

Bahasa Indonesia

2023-03-31

OrderedDict di Python

Apa itu OrderedDict

Dalam Python, kamus adalah struktur data bawaan yang menyimpan pasangan kunci-nilai. Mereka tidak berurutan, yang berarti urutan elemen tidak dijaga. Namun, dalam beberapa situasi, perlu untuk mempertahankan urutan elemen. OrderedDict adalah subkelas kamus khusus dari modul collections yang menjaga urutan elemennya sesuai dengan urutan yang ditambahkan. Hal ini memungkinkan untuk memanipulasi dan mengambil data secara terurut dengan lebih mudah.

Membuat OrderedDict

Untuk membuat OrderedDict kosong, cukup impor kelas OrderedDict dari modul collections dan instansiasi:

python
from collections import OrderedDict
my_ordered_dict = OrderedDict()

Anda dapat menginisialisasi sebuah OrderedDict dengan pasangan kunci-nilai dengan melewatkan mereka sebagai daftar tuple atau sebagai argumen kata kunci:

python
from collections import OrderedDict

# Using a list of tuples
my_ordered_dict = OrderedDict([('a', 1), ('b', 2), ('c', 3)])

# Using keyword arguments
my_ordered_dict = OrderedDict(a=1, b=2, c=3)

Anda dapat membuat sebuah OrderedDict dengan menggunakan pemahaman kamus, yang merupakan cara ringkas untuk membuat kamus dari iterable yang sudah ada:

python
from collections import OrderedDict

squares = OrderedDict((i, i * i) for i in range(1, 6))

Ini membuat OrderedDict dengan kunci dari 1 hingga 5 dan nilai kuadrat yang sesuai.

Operasi pada OrderedDict

Mengakses Elemen

Anda dapat mengakses elemen dalam sebuah OrderedDict dengan menggunakan metode yang sama seperti untuk kamus biasa:

python
from collections import OrderedDict

my_ordered_dict = OrderedDict(a=1, b=2, c=3)

# Accessing a value using its key
value = my_ordered_dict['a']

Menambah dan Memperbarui Elemen

Menambah dan memperbarui elemen dalam sebuah OrderedDict mirip dengan kamus biasa:

python
from collections import OrderedDict

my_ordered_dict = OrderedDict(a=1, b=2, c=3)

# Adding a new key-value pair
my_ordered_dict['d'] = 4

# Updating an existing key-value pair
my_ordered_dict['b'] = 5

Menghapus Elemen

Untuk menghapus elemen dari sebuah OrderedDict, Anda dapat menggunakan kata kunci del atau metode pop():

python
from collections import OrderedDict

my_ordered_dict = OrderedDict(a=1, b=2, c=3)

# Deleting an element using the del keyword
del my_ordered_dict['b']

# Deleting an element using the pop() method
value = my_ordered_dict.pop('c')

Membalikkan OrderedDict

Untuk membalikkan urutan elemen dalam sebuah OrderedDict, Anda dapat menggunakan fungsi reversed():

python
from collections import OrderedDict

my_ordered_dict = OrderedDict(a=1, b=2, c=3)

reversed_ordered_dict = OrderedDict(reversed(my_ordered_dict.items()))

Mengurutkan OrderedDict

Untuk mengurutkan elemen dari sebuah OrderedDict, Anda dapat menggunakan fungsi sorted():

python
from collections import OrderedDict

my_ordered_dict = OrderedDict(a=3, b=1, c=2)

# Sort by keys
sorted_by_key = OrderedDict(sorted(my_ordered_dict.items()))

# Sort by values
sorted_by_value = OrderedDict(sorted(my_ordered_dict.items(), key=lambda x: x[1]))

Menggabungkan Dua OrderedDict

Untuk menggabungkan dua OrderedDict, Anda dapat menggunakan metode update():

python
from collections import OrderedDict

dict1 = OrderedDict(a=1, b=2, c=3)
dict2 = OrderedDict(d=4, e=5, f=6)

dict1.update(dict2)

Mengonversi OrderedDict ke Kamus Biasa

Untuk mengonversi sebuah OrderedDict kembali ke kamus biasa, Anda dapat menggunakan konstruktor dict():

python
from collections import OrderedDict

my_ordered_dict = OrderedDict(a=1, b=2, c=3)

regular_dict = dict(my_ordered_dict)

Contoh Praktis Penggunaan OrderedDict

OrderedDict dapat digunakan dalam berbagai skenario di mana urutan elemen penting.

Parsing dan Menghasilkan Berkas Konfigurasi

Pertimbangkan sebuah file konfigurasi dengan bagian dan pasangan kunci-nilai yang perlu dipertahankan dalam urutan tertentu:

config.ini
[General]
language = English
timezone = UTC

[Database]
host = localhost
port = 5432

Kita dapat menggunakan OrderedDict untuk menguraikan dan menyimpan konten dari file konfigurasi:

python
from collections import OrderedDict
import configparser

config = configparser.ConfigParser(dict_type=OrderedDict)
config.read('config.ini')

for section in config.sections():
    print(f"[{section}]")
    for key, value in config[section].items():
        print(f"{key} = {value}")
    print()

Objek JSON dengan Kunci Terurut

Ketika bekerja dengan objek JSON yang memerlukan urutan kunci untuk dijaga, Anda dapat menggunakan OrderedDict untuk menangani data:

python
import json
from collections import OrderedDict

json_string = '{"name": "Alice", "age": 30, "city": "New York"}'

# Load JSON data into an OrderedDict
data = json.loads(json_string, object_pairs_hook=OrderedDict)

# Modify the data
data['age'] = 31

# Dump the OrderedDict back to a JSON string
new_json_string = json.dumps(data, indent=2)
print(new_json_string)

Mengimplementasikan Cache LRU

Cache LRU (Least Recently Used) adalah kebijakan penggantian cache yang menghapus item yang paling jarang digunakan terlebih dahulu. OrderedDict dapat digunakan untuk mengimplementasikan cache seperti itu:

python
from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity: int):
        self.cache = OrderedDict()
        self.capacity = capacity

    def get(self, key: str):
        if key not in self.cache:
            return None
        self.cache.move_to_end(key)
        return self.cache[key]

    def put(self, key: str, value: int):
        if key in self.cache:
            self.cache.move_to_end(key)
        self.cache[key] = value
        if len(self.cache) > self.capacity:
            self.cache.popitem(last=False)

# Example usage
cache = LRUCache(3)
cache.put('a', 1)
cache.put('b', 2)
cache.put('c', 3)
cache.put('d', 4)

print(cache.get('a'))  # None, as 'a' has been removed due to cache capacity
print(cache.get('b'))  # 2, as 'b' is still in the cache

Referensi

https://docs.python.org/ja/3/library/collections.html?highlight=ordereddict#collections.OrderedDict
https://www.digitalocean.com/community/tutorials/python-ordereddict
https://www.geeksforgeeks.org/ordereddict-in-python/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!