collections --- tipe koleksi dan kontainer

Modul ini menyediakan tipe data kontainer khusus yang melengkapi bawaan list, tuple, dict, dan set: antrean berujung ganda (deque), pabrik tuple-dengan-bidang-bernama (namedtuple()), dan dict yang mempertahankan urutan (OrderedDict).

Kelas

class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)

Deque (antrean berujung ganda) adalah kontainer mirip list yang mendukung append dan pop O(1) dari kedua sisi deque. Deque baru dibuat menggunakan argumen berikut:

  • iterable adalah iterable yang digunakan untuk mengisi deque saat dibuat. Dapat berupa tuple atau list kosong untuk membuat deque yang awalnya kosong.

  • maxlen harus ditentukan dan deque akan dibatasi hingga panjang maksimum ini. Setelah deque penuh, setiap item baru yang ditambahkan akan membuang item dari ujung yang berlawanan.

  • flags opsional dapat bernilai 1 untuk memeriksa overflow saat menambahkan item.

Objek Deque mendukung bool, len(), iterasi, serta load dan store subscript. Mereka juga memiliki metode berikut:

append(x: Any) None

Tambahkan x ke sisi kanan deque. Memunculkan IndexError jika pemeriksaan overflow diaktifkan dan tidak ada ruang lagi di antrean.

appendleft(x: Any) None

Tambahkan x ke sisi kiri deque. Memunculkan IndexError jika pemeriksaan overflow diaktifkan dan tidak ada ruang lagi di antrean.

pop() Any

Hapus dan kembalikan item dari sisi kanan deque. Memunculkan IndexError jika tidak ada item yang tersedia.

popleft() Any

Hapus dan kembalikan item dari sisi kiri deque. Memunculkan IndexError jika tidak ada item yang tersedia.

extend(iterable: Iterable) None

Perluas deque dengan menambahkan semua item dari iterable ke sisi kanan deque. Memunculkan IndexError jika pemeriksaan overflow diaktifkan dan tidak ada ruang lagi di deque.

collections.namedtuple(name: str, fields: str | Sequence[str]) type

Ini adalah fungsi pabrik untuk membuat tipe namedtuple baru dengan nama dan sekumpulan bidang tertentu. Namedtuple adalah subkelas tuple yang memungkinkan akses ke bidang-bidangnya tidak hanya melalui indeks numerik, tetapi juga dengan sintaks akses atribut menggunakan nama bidang simbolis. Fields adalah urutan string yang menentukan nama bidang. Untuk kompatibilitas dengan CPython, ini juga dapat berupa string dengan nama bidang yang dipisahkan spasi (tetapi ini kurang efisien). Contoh penggunaan:

from collections import namedtuple

MyTuple = namedtuple("MyTuple", ("id", "name"))
t1 = MyTuple(1, "foo")
t2 = MyTuple(2, "bar")
print(t1.name)
assert t2.name == t2[1]

Instans juga menyediakan metode berikut:

collections._asdict() OrderedDict

Mengembalikan nama bidang dan nilainya sebagai OrderedDict.

class collections.OrderedDict(*args: Any, **kwargs: Any)

Subkelas tipe dict yang mengingat dan mempertahankan urutan kunci yang ditambahkan. Menerima bentuk konstruktor yang sama seperti dict (iterable pasangan (key, value), pemetaan lain, atau argumen kata kunci). Saat ordered dict diiterasi, kunci/item dikembalikan dalam urutan penambahannya:

from collections import OrderedDict

# To make benefit of ordered keys, OrderedDict should be initialized
# from sequence of (key, value) pairs.
d = OrderedDict([("z", 1), ("a", 2)])
# More items can be added as usual
d["w"] = 5
d["b"] = 3
for k, v in d.items():
    print(k, v)

Keluaran:

z 1
a 2
w 5
b 3
popitem() Tuple

Hapus dan kembalikan pasangan (key, value) dari kamus. Pasangan dikembalikan dalam urutan LIFO.

Perbedaan dengan CPython

OrderedDict.popitem() tidak mendukung argumen last=False dan akan selalu menghapus serta mengembalikan item terakhir jika ada.

Solusi untuk ini adalah menggunakan pop(<first_key>) untuk menghapus item pertama:

first_key = next(iter(d))
d.pop(first_key)