Dictionary — Data Berpasangan
List bagus untuk deretan hal sejenis. Dictionary untuk saat setiap nilai punya nama sendiri — dan itu ternyata sangat sering.
Intisari
- Ditulis dengan kurung kurawal:
{"kunci": nilai}. Ambil isinya dengandata["kunci"]. - Kunci biasanya teks. Nilainya boleh apa saja — termasuk list atau dictionary lain.
- Kunci yang tidak ada →
KeyError. Pakai.get("kunci")kalau ingin aman. - Cek keberadaan dengan
"kunci" in data, bukan dengan mencoba mengambilnya. - Menyusuri isinya:
for k, v in data.items():.
Kenapa bukan list saja
# Dengan list — apa arti indeks 2? Harus dihafal, dan gampang salah.
siswa = ["Budi", 20, "Bandung"]
print(siswa[2])
# Dengan dictionary — datanya menjelaskan dirinya sendiri
siswa = {"nama": "Budi", "umur": 20, "kota": "Bandung"}
print(siswa["kota"])
Pola pikirnya: list menjawab “yang ke berapa”, dictionary menjawab “yang mana”. Kalau kamu sedang menulis komentar untuk mengingatkan diri sendiri apa arti indeks tertentu, itu tanda kamu sebenarnya butuh dictionary.
Membuat dan membaca
harga = {
"apel": 15000,
"jeruk": 12000,
"mangga": 20000,
}
print(harga["apel"]) # 15000
print(len(harga)) # 3
Koma di akhir baris terakhir itu sengaja. Python mengizinkannya, dan itu membuat penambahan baris berikutnya tidak mengubah baris lama — riwayat perubahan jadi lebih bersih.
Menambah dan mengubah
harga["melon"] = 18000 # kunci baru → ditambahkan
harga["apel"] = 16000 # kunci lama → nilainya diganti
del harga["jeruk"] # hapus
dibuang = harga.pop("mangga") # hapus DAN ambil nilainya
Tidak ada perintah khusus untuk menambah — menugaskan ke kunci baru sudah cukup.
Kunci yang tidak ada
harga["durian"]
# KeyError: 'durian'
Tiga cara menghadapinya, dari yang paling sering dipakai:
harga.get("durian") # None — tidak error
harga.get("durian", 0) # 0 — nilai cadangan kalau tidak ada
if "durian" in harga: # cek dulu, baru ambil
print(harga["durian"])
in pada dictionary memeriksa KUNCI, bukan nilai.
"apel" in harga → True. Tapi 15000 in harga → False,
walaupun angka itu ada sebagai nilai. Untuk memeriksa nilai: 15000 in harga.values().
Menyusuri dictionary
for kunci in harga: # default: kuncinya saja
print(kunci)
for kunci, nilai in harga.items(): # ← yang paling sering dipakai
print(f"{kunci}: Rp {nilai:,}")
for nilai in harga.values(): # nilainya saja
print(nilai)
apel: Rp 16,000
melon: Rp 18,000
| Metode | Memberi |
|---|---|
.keys() | Semua kunci |
.values() | Semua nilai |
.items() | Pasangan (kunci, nilai) |
.get(k, default) | Nilai, atau cadangan kalau tidak ada |
Dictionary di dalam list — bentuk data yang paling umum
Ini bentuk yang akan kamu temui terus-menerus, terutama saat bekerja dengan data dari internet:
siswa = [
{"nama": "Ani", "nilai": 85},
{"nama": "Budi", "nilai": 90},
{"nama": "Cici", "nilai": 78},
]
for s in siswa:
print(f"{s['nama']}: {s['nilai']}")
# Rata-rata seluruh kelas
total = sum(s["nilai"] for s in siswa)
print(f"Rata-rata: {total / len(siswa):.1f}")
# Siapa yang tertinggi
terbaik = max(siswa, key=lambda s: s["nilai"])
print(f"Terbaik: {terbaik['nama']}")
Perhatikan kutipnya: di dalam f-string yang memakai kutip dua, kunci dictionary ditulis
dengan kutip satu — f"{s['nama']}". Kalau jenis kutipnya sama, Python bingung di mana
teksnya berakhir.
Menghitung frekuensi — pola klasik
kata = "belajar python itu menyenangkan"
jumlah = {}
for huruf in kata:
if huruf == " ":
continue
jumlah[huruf] = jumlah.get(huruf, 0) + 1
print(jumlah) # {'b': 1, 'e': 3, 'l': 1, 'a': 4, ...}
Baris jumlah.get(huruf, 0) + 1 itu idiom yang layak dihafal: “ambil hitungan yang sudah ada,
atau nol kalau ini pertama kali, lalu tambah satu.”
Latihan: buat buku alamat sederhana. Simpan nama sebagai kunci dan nomor telepon sebagai nilai. Sediakan menu untuk menambah, mencari (tangani kasus nama tidak ditemukan), menghapus, dan menampilkan semua kontak terurut menurut nama.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.