Dictionary menyimpan data berpasangan key-value, dan sering kali kita perlu membangun dictionary baru dari koleksi yang sudah ada: menghitung nilai turunan untuk setiap key, membalik arah pencarian, atau menyaring item yang tidak relevan. Dengan loop biasa, pekerjaan tersebut butuh inisialisasi dictionary kosong plus if dan penugasan per elemen. Dictionary comprehension menyatukan semuanya dalam satu ekspresi {key: value for item in iterable}.

Sintaks Dasar #

Bentuk umumnya {kunci: nilai for item in iterable} — mirip list comprehension, tetapi ekspresi di depan terdiri dari dua bagian yang dipisah titik dua. Sumber paling sering adalah dictionary lain lewat .items(), yang mengeluarkan pasangan key-value siap pakai.

python
negara = ["indonesia", "jepang", "portugal"]

jumlah_huruf = {nama: len(nama) for nama in negara}
print(jumlah_huruf)

Output yang Dihasilkan:

text
{'indonesia': 9, 'jepang': 6, 'portugal': 8}

Mari kita bedah proses pada baris 3 (jumlah_huruf = {nama: len(nama) for nama in negara}):

  1. Bagian for nama in negara: interpreter mengambil setiap nama negara dari list sumber.
  2. Bagian nama:: nama negara menjadi key pada dictionary baru.
  3. Bagian len(nama): panjang nama negara dihitung menjadi value.
  4. Pengumpulan: setiap pasangan nama: len(nama) dimasukkan ke dictionary hasil; urutan pencetakan dictionary mengikuti urutan penyimpanan.

Membalik Pasangan Key dan Value #

Pola {v: k for k, v in asal.items()} membalik arah pencarian: value lama menjadi key baru. Ini berguna ketika kita sering mencari berdasarkan nilai yang tadinya tersimpan di sisi kanan.

python
kode_produk = {"kopi": "P001", "teh": "P002", "susu": "P003"}

nama_dari_kode = {kode: nama for nama, kode in kode_produk.items()}
print(nama_dari_kode)

Output yang Dihasilkan:

text
{'P001': 'kopi', 'P002': 'teh', 'P003': 'susu'}

Unpacking for nama, kode in ... memecah setiap tuple .items() menjadi dua variabel, lalu posisinya ditukar di bagian kode: nama. Syarat pentingnya: value asal harus unik. Jika ada dua key dengan value sama, value tersebut bertabrakan sebagai key baru dan hanya pasangan terakhir yang selamat:

python
stok = {"kopi": 12, "teh": 0, "susu": 12}

dari_jumlah = {jumlah: nama for nama, jumlah in stok.items()}
print(dari_jumlah)

Output yang Dihasilkan:

text
{12: 'susu', 0: 'teh'}

Kopi lenyap dari hasil — angka 12 milik “kopi” terlebih dahulu menjadi key, lalu ditimpa oleh 12 milik “susu”. Pembalikan seperti ini aman hanya jika kita yakin tidak ada nilai ganda.

Menyaring Item Dictionary #

Klausa if bekerja seperti pada list comprehension: elemen yang tidak lolos syarat tidak masuk ke dictionary hasil.

python
stok = {"kopi": 12, "teh": 0, "susu": 4, "gula": 0}

tersedia = {nama: jumlah for nama, jumlah in stok.items() if jumlah > 0}
print(tersedia)

Output yang Dihasilkan:

text
{'kopi': 12, 'susu': 4}

Dua produk dengan stok 0 tersaring keluar tanpa perlu if terpisah di dalam loop. Pola tiga bagian ini — kunci: nilai, for ... in ...items(), if syarat — adalah kombinasi yang akan sering kita tulis saat membersihkan data.

Perbandingan dengan dict.fromkeys #

Method dict.fromkeys() membangun dictionary dari daftar key dengan satu nilai yang sama untuk semuanya. Keduanya punya wilayah kerja berbeda:

python
produk = ["kopi", "teh", "susu"]

# Comprehension: nilai dihitung untuk setiap key
diskon = {p: 10 for p in produk}
print(diskon)

# dict.fromkeys: satu nilai default untuk semua key
stok_awal = dict.fromkeys(produk, 0)
print(stok_awal)

# Jebakan: nilai mutable dipakai bersama
keranjang = dict.fromkeys(produk, [])
keranjang["kopi"].append("kupon 10%")
print(keranjang)

Output yang Dihasilkan:

text
{'kopi': 10, 'teh': 10, 'susu': 10}
{'kopi': 0, 'teh': 0, 'susu': 0}
{'kopi': ['kupon 10%'], 'teh': ['kupon 10%'], 'susu': ['kupon 10%']}
KebutuhanAlat yang tepat
Nilai berbeda per key, dihitung dari key atau data laindictionary comprehension
Nilai konstan sama untuk semua keydict.fromkeys(keys, nilai)
Nilai default berupa angka/string/Nonedict.fromkeys() aman dipakai
Nilai default berupa list/dictcomprehension {k: [] for k in keys} agar tiap key punya list sendiri