23. Dictionary
Sebuah dictionary memetakan key ke nilai. Alih-alih posisi (0, 1, 2), kamu mencari sesuatu berdasarkan nama — seperti mencari kata di kamus sungguhan.
Membuat dictionary
Sintaks literal menggunakan kurung kurawal dengan pasangan
"key": value:
player = {
"name": "Keiko",
"level": 7,
"hp": 95,
"alive": True,
}Koma di akhir bersifat opsional, tapi gaya yang baik: memudahkan penambahan field menjadi diff satu baris nanti.
Baca nilai dengan notasi bracket:
print(player["name"]) # Keiko
print(player["level"]) # 7Python tidak mendukung notasi titik (player.name) untuk
dictionary. Kamu selalu menggunakan player["name"].
Ketika key disimpan dalam variable, itu juga berfungsi:
field = "hp"
print(player[field]) # 95Menambah dan mengubah field
Menugaskan ke key yang belum ada akan membuatnya; menugaskan ke key
yang sudah ada akan menggantinya; del menghapusnya:
player["mana"] = 30 # new key
player["hp"] = 100 # replace existing
del player["alive"] # deleteSetelah tiga baris tersebut, player menyimpan
"name", "level", "hp",
"mana".
Loop dengan .items()
.items() memberikan setiap pasangan key-value sesuai
urutan penyisipan:
for key, value in player.items():
print(key, value)Python 3.7+ menjamin bahwa .items() mengembalikan
pasangan sesuai urutan kamu menyisipkannya. Jika butuh urutan alfabet,
urutkan key-nya:
for key in sorted(player.keys()):
print(key, player[key])Jangan gunakan for key in player: lalu mencoba menghapus
key di dalam loop — Python memunculkan RuntimeError jika
kamu mengubah ukuran dictionary saat sedang diiterasi. Buat list key
yang akan dihapus terlebih dahulu, lalu hapus setelah loop.
Memeriksa apakah key ada
Gunakan operator in:
if "email" in player:
print(player["email"])
else:
print("No email on file.")Mengakses key yang tidak ada secara langsung akan memunculkan
KeyError. Pengecekan in menghindari itu.
Alternatifnya, .get(key) mengembalikan None
untuk key yang tidak ada tanpa memunculkan error:
print(player.get("email")) # None
print(player.get("email", "n/a")) # n/a (default if missing)Dictionary bersarang
Nilai dictionary bisa berupa dictionary lain (atau list) — cara standar untuk membangun data terstruktur:
player = {
"name": "Keiko",
"position": {"x": 0, "y": 5, "z": -3},
"inventory": ["sword", "potion", "map"],
}
print(player["position"]["x"]) # 0
print(player["inventory"][0]) # swordInilah persis cara game engine dan API web mengirimkan data.
Dictionary dan list bersama
List of dictionary adalah pola umum — leaderboard, database item, file save:
quest = {
"name": "Healer's Errand",
"reward": 50,
"steps": [
"Speak to the elder",
"Collect 5 herbs",
"Return to camp",
],
}
print(quest["name"]) # Healer's Errand
print(quest["steps"][0]) # Speak to the elder
print(len(quest["steps"])) # 3Pekerjaan Rumah
Soal 1 — Catatan player
Buka exercises/23/homework/01-player-record.py. Buat
dictionary player dengan setidaknya empat key ini: "name"
(string), "class" (string), "level" (number),
"alive" (boolean). Lalu loop dengan
for key, value in player.items(): untuk mencetak setiap key
dan nilai, satu per baris.
Soal 2 — Bobot inventaris
Buka exercises/23/homework/02-inventory-weights.py.
Sebuah dictionary memetakan nama item ke beratnya (angka). Hitung dan
cetak total beratnya.
Soal 3 — Pencarian aman
Buka exercises/23/homework/03-safe-lookup.py. Tulis
function lookup(d, key) yang mengembalikan nilai jika key
ada, atau string "(not found)" jika tidak. Uji dengan tiga
pemanggilan: satu yang berhasil, satu yang gagal, dan satu di mana key
disimpan dalam variable.
Tantangan — Frekuensi kata
Buka exercises/23/homework/04-word-frequency.py.
Diberikan list kata (beberapa diulang), buat dictionary yang memetakan
setiap kata unik ke jumlah kemunculannya. Cetak dictionary-nya satu
pasangan per baris.
Bingung atau sudah selesai? Buka halaman solusi pekerjaan rumah.