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:
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:
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:
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:
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:
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()
:
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()
:
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()
:
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()
:
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()
:
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:
[General]
language = English
timezone = UTC
[Database]
host = localhost
port = 5432
Kita dapat menggunakan OrderedDict untuk menguraikan dan menyimpan konten dari file konfigurasi:
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:
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:
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