Belajar Python 7
Perulangan untuk Melihat Data di Dict

oleh: Suryo Adhy Chandra, ST

Ilustrasi iterasi dictionary

Dict memiliki data dalam bentuk pasangan key dan value. Saat melakukan perulangan pada dict, kita bisa membaca key saja, value saja, atau keduanya sekaligus.

Saat membuka rapor, kamu melihat daftar mata pelajaran dan nilainya berdampingan. Itulah bentuk alami dict: setiap nilai punya label. Kalau kita ingin membuat laporan dari data seperti itu, misalnya menghitung total nilai, mencari mata pelajaran terbaik, atau mencetak semuanya dalam tabel, kita perlu cara untuk menelusuri dict dari awal sampai akhir. Cara menelusuri dict sedikit berbeda dari list karena ada dua bagian yang bisa kita ambil: key dan value.

Bab ini memperdalam materi sebelumnya dengan contoh yang lebih bermanfaat. Kamu akan menjumlahkan semua value, menyaring pasangan berdasarkan syarat, mengurutkan key, menghitung kemunculan kata (teknik yang dipakai aplikasi sungguhan), membaca dict di dalam dict, serta mengenali kesalahan khas saat menelusuri dict.

1. Melihat semua key

siswa = { "nama": "Sinta", "kelas": "7A", "umur": 13 } for key in siswa: print(key)

2. Melihat semua value

for value in siswa.values(): print(value)

3. Melihat key dan value sekaligus

Cara paling lengkap adalah memakai items(). Dengan ini kita bisa mendapatkan key dan value dalam satu perulangan.

for key, value in siswa.items(): print(key, "=", value)

4. Contoh output yang lebih rapi

for key, value in siswa.items(): print(f"{key}: {value}")

Kode di atas memakai f-string, yaitu cara mudah menggabungkan teks dengan isi variabel di Python.

5. Contoh dict berisi nilai pelajaran

nilai = { "matematika": 90, "bahasa": 85, "ipa": 88 } for pelajaran, skor in nilai.items(): print(f"Nilai {pelajaran} adalah {skor}")
Gunakan .keys() untuk key, .values() untuk value, dan .items() untuk key dan value sekaligus.

6. Menjumlahkan semua value

Ketika hanya angkanya yang kita butuhkan, telusuri values() dan tambahkan ke variabel penampung. Hasilnya bisa dipakai untuk mencari rata-rata.

nilai = {"matematika": 90, "bahasa": 85, "ipa": 88} total = 0 for skor in nilai.values(): total += skor print("Total:", total) print("Rata-rata:", round(total / len(nilai), 2))
Total: 263 Rata-rata: 87.67

Total 90 + 85 + 88 adalah 263. Rata-ratanya 263 dibagi 3 sama dengan 87,666..., yang dibulatkan oleh round(..., 2) menjadi dua angka di belakang koma, yaitu 87.67.

7. Menyaring pasangan dengan syarat

Karena items() memberi key dan value sekaligus, kita bisa menaruh if di dalamnya untuk memilih pasangan tertentu. Fungsi max() dengan argumen key=nilai.get mencari key yang value-nya paling besar.

for pelajaran, skor in nilai.items(): if skor >= 88: print(pelajaran, "bagus") tertinggi = max(nilai, key=nilai.get) print(tertinggi, nilai[tertinggi])
matematika bagus ipa bagus matematika 90

Hanya matematika (90) dan ipa (88) yang memenuhi syarat 88 ke atas, sedangkan bahasa (85) dilewati. Baris berikutnya membandingkan semua key berdasarkan value-nya dan mengembalikan key dengan value terbesar, yaitu matematika.

8. Menelusuri key secara berurutan

Secara bawaan, dict ditelusuri menurut urutan pemasukan data. Kalau ingin urut abjad, bungkus dict dengan sorted().

for pelajaran in sorted(nilai): print(pelajaran)
bahasa ipa matematika

9. Menghitung kemunculan kata

Salah satu pemakaian dict yang paling terkenal adalah menghitung seberapa sering sesuatu muncul. Key diisi kata, sedangkan value diisi jumlahnya. Method split() memecah kalimat menjadi list kata.

kalimat = "bola kaki bola basket" hitung = {} for kata in kalimat.split(): hitung[kata] = hitung.get(kata, 0) + 1 print(hitung)
{'bola': 2, 'kaki': 1, 'basket': 1}

Kunci triknya ada pada hitung.get(kata, 0) + 1. Jika kata belum pernah dicatat, get mengembalikan 0 sehingga hasilnya 1. Jika sudah ada, jumlah lama ditambah satu. Karena "bola" muncul dua kali, jumlahnya menjadi 2.

10. Dict di dalam dict

kelas = { "7A": {"wali": "Bu Rina", "jumlah": 30}, "7B": {"wali": "Pak Doni", "jumlah": 28} } for nama_kelas, info in kelas.items(): print(f"{nama_kelas}: wali {info['wali']}, {info['jumlah']} siswa")
7A: wali Bu Rina, 30 siswa 7B: wali Pak Doni, 28 siswa

Pada setiap putaran, nama_kelas berisi key luar ("7A"), sedangkan info berisi dict kecil milik kelas itu. Untuk mengambil bagian dalamnya, kita pakai kurung siku lagi, seperti info['wali']. Perhatikan tanda petik di dalam f-string memakai jenis yang berbeda dari tanda petik pembungkusnya.

11. Kesalahan yang sering terjadi

Lupa memakai items(). Menulis for k, v in siswa: menghasilkan ValueError: too many values to unpack (expected 2), karena perulangan langsung pada dict hanya memberi key. Gunakan siswa.items().
Menghapus isi dict saat menelusurinya. Menjalankan del d[k] di dalam for k in d: menghasilkan RuntimeError: dictionary changed size during iteration. Telusuri salinannya dengan list(d) bila ingin menghapus.
Salah mengira isi variabel. Pada for k in d.values(), variabel k berisi value, bukan key. Memanggil k.upper() pada value berupa angka menghasilkan AttributeError: 'int' object has no attribute 'upper'.
Menggabungkan teks dengan angka. Perintah k + v dengan v berupa angka menghasilkan TypeError: can only concatenate str (not "int") to str. Pakai koma pada print atau f-string.

12. Ringkasan

13. Latihan

  1. Dari dict harga = {"pensil": 2000, "buku": 8000, "penghapus": 1500}, cetak setiap barang dan harganya dengan format pensil: 2000.
    Lihat jawaban
    for barang, nominal in harga.items(): print(f"{barang}: {nominal}")
    Keluarannya tiga baris sesuai urutan dict: pensil: 2000, buku: 8000, penghapus: 1500.
  2. Hitung total harga semua barang pada dict di atas.
    Lihat jawaban
    total = 0 for nominal in harga.values(): total += nominal print(total)
    Keluarannya 11500.
  3. Cetak hanya nama barang yang harganya di atas 1800.
    Lihat jawaban
    for barang, nominal in harga.items(): if nominal > 1800: print(barang)
    Keluarannya pensil dan buku.
  4. Hitung berapa kali huruf muncul dalam kata "ayam" memakai dict.
    Lihat jawaban
    hitung = {} for huruf in "ayam": hitung[huruf] = hitung.get(huruf, 0) + 1 print(hitung)
    Keluarannya {'a': 2, 'y': 1, 'm': 1}.
← Kembali Ke Daftar Pelajaran Python #1