List menempatkan data berdasarkan posisi, tetapi manusia mengingat data berdasarkan nama: harga apel, umur Budi, stok gudang. Mencari posisi satu per satu setiap kali dibutuhkan tidak praktis. Dictionary menyelesaikan masalah ini dengan memetakan key ke value, sehingga setiap nilai bisa diambil langsung menggunakan labelnya, bukan nomor posisinya.
Membuat Dictionary dan Mengakses Nilai #
Dictionary ditulis dengan kurung kurawal berisi pasangan key: value. Akses nilai memakai kurung siku dengan key di dalamnya. Ketika key belum tentu ada, gunakan method .get() untuk menghindari galat dan menentukan nilai cadangan.
harga = {"apel": 5000, "jeruk": 3000, "mangga": 7500}
print(harga["apel"])
print(harga.get("jeruk"))
print(harga.get("durian"))
print(harga.get("durian", 0))Output yang Dihasilkan:
5000
3000
None
0Perbedaan perilaku keduanya terlihat jelas pada key "durian" yang tidak ada. Akses dengan .get() menghasilkan None, atau nilai cadangan 0 bila argumen kedua diberikan. Akses dengan kurung siku terhadap key yang tidak dikenal justru langsung memunculkan galat:
>>> harga = {"apel": 5000}
>>> harga["durian"]
Traceback (most recent call last):
...
KeyError: 'durian'Pemilihan antara keduanya adalah keputusan desain. Kurung siku cocok saat key memang wajib ada — jika ternyata tidak ada, program memang seharusnya berhenti dan melapor. Method .get() cocok saat ketidakhadiran key adalah kondisi normal, misalnya saat membaca stok barang yang memang boleh belum tercatat.
Menambah dan Mengubah Nilai #
Penugasan dengan kurung siku memiliki dua peran sekaligus: menambah pasangan baru jika key belum ada, atau menimpa nilai lama jika key sudah terdaftar. Method .update() menggabungkan pasangan dari dictionary lain sekaligus.
harga = {"apel": 5000, "jeruk": 3000}
harga["mangga"] = 7500
print(harga)
harga["apel"] = 6000
print(harga)
harga.update({"jeruk": 3500, "pisang": 2000})
print(harga)
print(list(harga.keys()))
print(list(harga.values()))
print(list(harga.items()))Output yang Dihasilkan:
{'apel': 5000, 'jeruk': 3000, 'mangga': 7500}
{'apel': 6000, 'jeruk': 3000, 'mangga': 7500}
{'apel': 6000, 'jeruk': 3500, 'mangga': 7500, 'pisang': 2000}
['apel', 'jeruk', 'mangga', 'pisang']
[6000, 3500, 7500, 2000]
[('apel', 6000), ('jeruk', 3500), ('mangga', 7500), ('pisang', 2000)]Tiga method terakhir adalah alat bantu utama saat membaca isi dictionary:
.keys(): semua key dalam urutan penyisipan..values(): semua nilai mengikuti urutan key-nya..items(): daftar pasangan(key, value)dalam bentuk tuple.
Satu hal yang perlu dicatat dari output di atas: "apel" tetap berada di posisi pertama pada setiap baris cetak meskipun nilainya pernah ditimpa dari 5000 menjadi 6000. Penimpaan nilai mengubah isi key, tetapi tidak memindahkan posisi key-nya.
Operator in, del, dan pop #
Operator in pada dictionary memeriksa key, bukan value. Untuk penghapusan, statement del menghapus berdasarkan key tanpa mengembalikan apa pun, sedangkan method pop() menghapus sekaligus mengembalikan nilai yang dihapus.
stok = {"apel": 10, "jeruk": 8, "mangga": 15}
print("jeruk" in stok)
print("durian" in stok)
stok.pop("jeruk")
print(stok)
del stok["apel"]
print(stok)Output yang Dihasilkan:
True
False
{'apel': 10, 'mangga': 15}
{'mangga': 15}Pola if "durian" in stok: adalah cara aman memeriksa keberadaan key sebelum mengakses nilainya dengan kurung siku. Method pop() juga menerima argumen kedua sebagai nilai cadangan, sehingga stok.pop("durian", 0) tidak memunculkan KeyError saat key-nya tidak ada.
Urutan Penyisipan dan Nested Dictionary #
Dictionary menjaga urutan sesuai urutan penyisipan — jaminan resmi sejak Python 3.7. Dictionary juga boleh berisi struktur data lain sebagai value, termasuk dictionary lain. Pola ini disebut nested dictionary dan menjadi bentuk paling umum saat merepresentasikan data dunia nyata.
siswa = {
"nama": "Budi",
"nilai": {"matematika": 90, "fisika": 85},
"hobi": ["membaca", "berenang"],
}
print(siswa["nama"])
print(siswa["nilai"]["matematika"])
print(siswa["hobi"][0])
for mata_pelajaran, nilai in siswa["nilai"].items():
print(f"{mata_pelajaran}: {nilai}")Output yang Dihasilkan:
Budi
90
membaca
matematika: 90
fisika: 85Akses bertingkat dibaca dari kiri ke kanan: siswa["nilai"]["matematika"] berarti ambil dictionary nilai dari siswa, lalu ambil nilai "matematika" dari dictionary tersebut. Loop for pada .items() mengeluarkan key dan value secara bersamaan — teknik iterasi ini akan kita perdalam pada Chapter Iterasi Collections.
Satu aturan penutup yang wajib diingat: key dictionary harus hashable. String, integer, dan tuple aman digunakan sebagai key; list dan dictionary lain tidak boleh. Alasan di balik aturan ini sudah kita bahas pada Chapter Tuple.