Dictionary (tipe dict) menyimpan pasangan key dan value: kamu mencari sebuah nilai lewat namanya, bukan lewat nomor urutnya. Bayangin daftar harga di dinding Warung Kopi Pak Darto: "kopi susu 15.000, teh manis 5.000, roti bakar 12.000". Pelanggan tanya "teh manis berapa?", dan Pak Darto mencari tulisan teh manis, bukan "baris nomor 2". Tiap nama cuma ditulis sekali. Kalau harganya naik, angka di sebelah nama itu yang diganti.
🧪 Tebakan cepat:
menu = {"kopi susu": 15000, "teh manis": 5000}, laluprint(menu["es jeruk"]). HasilnyaNone,0, atau error? Tebak dulu, jawabannya ada di bagian "Key yang gak ada".
Membuat dictionary
menu = {"kopi susu": 15000, "teh manis": 5000, "roti bakar": 12000}
print(menu) # {'kopi susu': 15000, 'teh manis': 5000, 'roti bakar': 12000}
print(menu["teh manis"]) # 5000
print(len(menu)) # 3
print("teh manis" in menu) # True
print(15000 in menu) # False
- Dictionary ditulis dengan kurung kurawal
{ }. Tiap isinya pasangankey: value, dipisah koma. - Key adalah nama yang dicari, biasanya teks. Value adalah nilainya, boleh tipe apa saja.
menu["teh manis"]membaca value lewat key-nya. Kurung sikunya sama seperti indeks list, tapi isinya key, bukan nomor.menu[0]gak berarti "yang pertama", dan hasilnyaKeyError: 0.len(menu)menghitung jumlah pasangan: 3.inmengecek key, bukan value. Jadi15000 in menuadalahFalse.- Key harus unik.
{"kopi susu": 15000, "kopi susu": 18000}cuma menyisakan satu:{'kopi susu': 18000}.
Menambah, mengubah, menghapus
menu = {"kopi susu": 15000, "teh manis": 5000, "roti bakar": 12000}
menu["es jeruk"] = 8000 # key baru: ditambahkan
menu["teh manis"] = 6000 # key lama: value-nya diganti
del menu["roti bakar"] # hapus key beserta value-nya
print(menu) # {'kopi susu': 15000, 'teh manis': 6000, 'es jeruk': 8000}
| Baris | Isi menu sesudahnya |
|---|---|
menu["es jeruk"] = 8000 |
{'kopi susu': 15000, 'teh manis': 5000, 'roti bakar': 12000, 'es jeruk': 8000} |
menu["teh manis"] = 6000 |
{'kopi susu': 15000, 'teh manis': 6000, 'roti bakar': 12000, 'es jeruk': 8000} |
del menu["roti bakar"] |
{'kopi susu': 15000, 'teh manis': 6000, 'es jeruk': 8000} |
menu[key] = valuedipakai untuk dua hal: kalau key-nya belum ada, pasangan baru ditambahkan; kalau sudah ada, value-nya diganti.- Dictionary ingat urutan key dimasukkan. Key baru masuk di ujung, dan mengganti value gak memindahkan posisinya:
teh manistetap di urutan kedua. del menu[key]menghapus pasangannya.menu.pop("es jeruk")juga menghapus, sekaligus memberikan value-nya,8000.
Key yang gak ada
Traceback (most recent call last):
File "/home/darto/warung.py", line 2, in <module>
print(menu["es jeruk"])
~~~~^^^^^^^^^^^^
KeyError: 'es jeruk'
Minta key yang gak ada dengan kurung siku langsung jadi error: KeyError, diikuti key yang dicari. Bukan None, bukan 0. Itu jawaban tebakannya.
Kalau key-nya memang mungkin gak ada, pakai .get():
menu = {"kopi susu": 15000, "teh manis": 5000, "roti bakar": 12000}
print(menu.get("es jeruk")) # None
print(menu.get("es jeruk", 0)) # 0
print(menu.get("teh manis", 0)) # 5000
.get(key)mengembalikanNonekalau key-nya gak ada, tanpa error..get(key, default)mengembalikandefaultsebagai gantinya. Contoh:data = {"nama": "Rina", "usia": 25}, makadata.get("email", "tidak ada")menghasilkantidak ada.- Kalau key-nya ada, default-nya diabaikan:
menu.get("teh manis", 0)tetap5000.
Menelusuri dictionary dengan for
menu = {"kopi susu": 15000, "teh manis": 5000, "roti bakar": 12000}
for nama, harga in menu.items():
print(f"{nama}: Rp{harga}")
kopi susu: Rp15000
teh manis: Rp5000
roti bakar: Rp12000
.items()memberikan pasangan(key, value)satu per satu.nama, hargamembongkar tiap pasangan jadi dua variabel.- Urutannya sama dengan urutan key dimasukkan.
for nama in menu:cuma memberikan key-nya.menu.keys()berisi semua key,menu.values()semua value:sum(menu.values())adalah32000.
Menghitung dengan dictionary
Pak Darto mau tahu berapa kali tiap menu dipesan hari ini. Dictionary cocok untuk itu: key-nya nama menu, value-nya hitungannya.
pesanan = ["kopi susu", "teh manis", "kopi susu", "roti bakar", "kopi susu"]
jumlah = {}
for item in pesanan:
jumlah[item] = jumlah.get(item, 0) + 1
print(jumlah) # {'kopi susu': 3, 'teh manis': 1, 'roti bakar': 1}
item |
jumlah.get(item, 0) |
jumlah sesudahnya |
|---|---|---|
| kopi susu | 0 | {'kopi susu': 1} |
| teh manis | 0 | {'kopi susu': 1, 'teh manis': 1} |
| kopi susu | 1 | {'kopi susu': 2, 'teh manis': 1} |
| roti bakar | 0 | {'kopi susu': 2, 'teh manis': 1, 'roti bakar': 1} |
| kopi susu | 2 | {'kopi susu': 3, 'teh manis': 1, 'roti bakar': 1} |
jumlah.get(item, 0)memberi 0 untuk menu yang baru pertama muncul, lalu ditambah 1.- Kalau datanya kalimat, pecah dulu jadi daftar kata dengan
.split()dari pelajaran string:"kopi teh kopi".split()menghasilkan['kopi', 'teh', 'kopi'].
⚠️ Jebakan yang sering ketemu
- Menambah ke key yang belum ada.
jumlah[item] += 1di dictionary kosong gagal denganKeyError: 'kopi susu', karena belum ada angka untuk ditambah. Pakaijumlah.get(item, 0) + 1. - Salah huruf di key.
menu["Kopi susu"]adalahKeyError: 'Kopi susu'. Bagi Python,Kopi susudankopi susudua key yang beda. - Lupa
.items().for nama, harga in menu:gagal denganValueError: too many values to unpack (expected 2), karena tanpa.items()yang keluar cuma key-nya. - Mencari value dengan
in.15000 in menuadalahFalsewalaupun ada menu seharga 15000. Untuk value, pakai15000 in menu.values().
TL;DR: Dictionary menyimpan pasangan key: value di dalam { }, dan menu["teh manis"] membaca value lewat key-nya. menu[key] = value menambah key baru di ujung atau mengganti value key lama tanpa memindahkan posisinya, dan del menu[key] menghapusnya. Key yang gak ada dengan kurung siku jadi KeyError, sedangkan .get(key, default) mengembalikan default-nya: data.get("email", "tidak ada") menghasilkan tidak ada. for nama, harga in menu.items(): menelusuri pasangannya sesuai urutan masuk. Untuk menghitung, pakai jumlah[item] = jumlah.get(item, 0) + 1.