23. Dictionary — Solusi Pekerjaan Rumah
File solusi .py ada di
exercises/23/homework/solutions/.
Soal 1 — Catatan player
Soal. Buat dictionary player; cetak setiap field
dengan .items().
Cara berpikir. Literal dengan empat key, loop
for k, v in player.items():, satu print per pasangan.
Solusi.
player = {
"name": "Keiko",
"class": "Mage",
"level": 7,
"alive": True,
}
for key, value in player.items():
print(key, value)Python 3.7+ mempertahankan urutan penyisipan, jadi field dicetak sesuai urutan yang kamu tulis.
Kesalahan umum.
- Menulis
player.namealih-alihplayer["name"]. Dictionary Python tidak mendukung notasi titik — sintaks itu untuk atribut objek. - Menggunakan
player[name](tanpa tanda kutip).nametanpa tanda kutip adalah variable; Python mencari variablename, bukan string"name".
Soal 2 — Bobot inventaris
Soal. Jumlahkan nilai-nilai dalam dictionary.
Cara berpikir. Gunakan .items() atau
.values(). Simpan total yang berjalan seperti di Bab 22.
Atau, sum(d.values()) melakukannya dalam satu
pemanggilan.
Solusi.
inventory = {
"sword": 3.5,
"shield": 5.0,
"potion": 0.2,
"map": 0.1,
"coins": 0.05,
}
total = 0
for _, weight in inventory.items():
total = total + weight
print(f"Total weight: {total:.2f}")Atau lebih singkat:
print(f"Total weight: {sum(inventory.values()):.2f}")_ mengabaikan key; jumlah hanya membutuhkan
nilai-nilainya.
Kesalahan umum.
- Mencoba
for i, weight in enumerate(inventory):.enumeratepada dictionary memberikan key, bukan nilai. Gunakan.values()atau.items().
Soal 3 — Pencarian aman
Soal. lookup(d, key) mengembalikan
nilai atau "(not found)".
Cara berpikir. Periksa key in d
terlebih dahulu. Kembalikan nilai jika ditemukan; jika tidak, kembalikan
string placeholder. Atau, gunakan .get(key) dan periksa
None.
Solusi.
def lookup(d, key):
if key in d:
return d[key]
return "(not found)"
player = {"name": "Keiko", "level": 7}
print(lookup(player, "name")) # Keiko
print(lookup(player, "email")) # (not found)
key = "level"
print(lookup(player, key)) # 7Kesalahan umum.
- Menggunakan
if d[key]:alih-alihif key in d:. Ketika key tidak ada,d[key]memunculkanKeyErrorsebelumifbisa dievaluasi. Selalu periksa keanggotaan denganinterlebih dahulu. - Menggunakan
if d.get(key):dan lupa bahwaFalsedan0bersifat falsy. Dictionary yang menyimpan"flag": Falseakan salah dilaporkan sebagai tidak ditemukan. Pengecekankey in dmenghindari itu.
Tantangan — Frekuensi kata
Soal. Hitung kemunculan setiap kata dalam list.
Cara berpikir. Telusuri list sekali. Untuk setiap
kata, cari di counts; jika belum ada, anggap hitungannya 0,
lalu tambahkan 1 dan simpan kembali.
Idiom Python-nya adalah counts.get(word, 0) —
mengembalikan 0 ketika kata belum ada di dictionary.
Solusi.
words = ["apple", "banana", "apple", "cherry", "apple", "banana"]
counts = {}
for word in words:
counts[word] = counts.get(word, 0) + 1
for word, count in counts.items():
print(word, count)Output (sesuai urutan penyisipan):
apple 3
banana 2
cherry 1
Kesalahan umum.
- Menulis
counts[word] = counts[word] + 1tanpa.get(word, 0). Pertama kali sebuah kata dilihat,counts[word]memunculkanKeyError. - Menggunakan
collections.Counter. Itu adalah alat produksi yang bekerja dengan sempurna, tapi membangun loop secara manual terlebih dahulu menunjukkan mekanismenya.
Selesai?
Berikutnya, List methods memberikan alat siap pakai untuk mengurutkan, membalik, dan mentransformasi list, dan bab terakhir Part 5 memisahkan kode ke beberapa file menggunakan module. Setelah itu, mini-project Part 5 — Petualangan Teks — menggabungkan dictionary, function, dan module menjadi dunia game kecil.