← Semua pembelajaran / Python Dasar
Fase 4 · Struktur Data

Dictionary — Data Berpasangan

List bagus untuk deretan hal sejenis. Dictionary untuk saat setiap nilai punya nama sendiri — dan itu ternyata sangat sering.

Sumber asli docs.python.org Resmi Rangkuman ~6 menit baca

Intisari

  • Ditulis dengan kurung kurawal: {"kunci": nilai}. Ambil isinya dengan data["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
MetodeMemberi
.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.