Membuat Dictionary Python
Tipe dict menyimpan pemetaan yang bisa diubah dari kunci unik ke nilai. Kamu mencari setiap elemennya melalui kunci yang bermakna, seperti nama, pengenal, atau tanggal yang kamu pilih sendiri.
Beberapa Cara Membuat Dictionary
Dictionary kosong dapat dibuat dengan {} atau dict(). Kamu juga dapat langsung mengisi pasangan kunci dan nilai saat membuatnya.
# Membuat dictionary kosong
a = {}
b = dict()
print("Dictionary kosong a:", a)
print("Dictionary kosong b:", b)
# Output: Dictionary kosong a: {}
# Output: Dictionary kosong b: {}
# Membuat dictionary dengan data
phone = {'ann': 110, 'bob': 991, 'cat': 112, 'dan': 999}
print("Dictionary phone:", phone)
# Output: Dictionary phone: {'ann': 110, 'bob': 991, 'cat': 112, 'dan': 999}
# Membuat dictionary bersarang
person = {1: {'name': 'ann', 'age': 23}, 2: {'name': 'bob', 'age': 21}}
print("Dictionary bersarang:", person)
# Output: Dictionary bersarang: {1: {'name': 'ann', 'age': 23}, 2: {'name': 'bob', 'age': 21}}
# Membuat dictionary dengan constructor
month = dict([(1, 'Jan'), (2, 'Feb'), (3, 'Mar')])
mass = dict(Mercury=3.3e23, Venus=4.9e24, Earth=6.0e24)
print("Dictionary month:", month)
print("Dictionary mass:", mass)
# Output: Dictionary month: {1: 'Jan', 2: 'Feb', 3: 'Mar'}
# Output: Dictionary mass: {'Mercury': 3.3e+23, 'Venus': 4.9e+24, 'Earth': 6e+24}Cara Menulis Pasangan Kunci dan Nilai
Dictionary ditulis dengan kurung kurawal. Koma memisahkan setiap pasangan, sedangkan titik dua memisahkan key dari value. Kurung kurawal kosong {} membuat dictionary kosong.
# Sintaks dasar dictionary
phone = {'ann': 110, 'bob': 991, 'cat': 112, 'don': 999}
print(phone)
# Output: {'ann': 110, 'bob': 991, 'cat': 112, 'don': 999}Nilai hash sebuah kunci harus tetap selama kunci itu berada di dalam dictionary. String dan angka merupakan contoh kunci yang hashable. Tuple dapat menjadi kunci jika semua elemennya juga hashable. Tuple yang berisi list tidak memenuhi syarat ini. List sendiri tidak hashable. Nilai yang dipasangkan dengan kunci boleh berupa objek Python apa pun, termasuk dictionary lain.
Kunci Menentukan Nilai
Dictionary menghubungkan setiap kunci dengan satu nilai. Python juga mengingat urutan saat setiap kunci pertama kali ditambahkan.
List dan tuple mengatur item berdasarkan posisi. Dictionary mengatur isinya berdasarkan kunci, sehingga kamu membaca dan memperbarui nilai melalui kunci tersebut.
Aturan Kunci dan Urutan
Dictionary bersifat mutable, tetapi setiap kuncinya harus unik dan memiliki nilai hash yang tetap. Saat dictionary dibaca dengan for loop, kuncinya muncul sesuai urutan saat pertama kali ditambahkan.
Urutan Penyisipan dan Kunci Unik
Sejak Python 3.7, spesifikasi bahasa menjamin insertion order pada dictionary. Menetapkan nilai baru ke kunci yang sudah ada tidak memindahkan posisi kunci tersebut. Jika kunci dihapus lalu ditambahkan kembali, posisinya berpindah ke akhir.
# Urutan penyisipan dipertahankan
phone = {'ann': 110, 'bob': 991, 'cat': 112, 'bob': 999}
print(phone)
# Output: {'ann': 110, 'bob': 999, 'cat': 112}
# Kunci 'bob' tetap di posisi kedua meski nilainya diubahJika satu kunci ditulis beberapa kali saat membuat dictionary, hanya nilai terakhir yang tersimpan. Posisi kunci tersebut tetap mengikuti kemunculan pertamanya.
Mengakses Nilai
Untuk mengambil value, tulis key di dalam kurung siku. Key seperti nama atau tanggal dapat dipakai sebagai pengenal, jadi kamu tidak perlu mencari value melalui indeks angka.
Memakai Kunci
# Mengakses nilai dengan kunci
phone = {'ann': 110, 'bob': 991, 'cat': 112, 'dan': 999}
# Mengambil nilai
print(phone['cat'])
# Output: 112
# Menggunakan variabel sebagai kunci
name = 'bob'
print(phone[name])
# Output: 991
# Menambah atau mengubah nilai
phone['bob'] = 999 # Mengubah nilai kunci yang ada
phone['eve'] = 111 # Menambah kunci baru
print(phone)
# Output: {'ann': 110, 'bob': 999, 'cat': 112, 'dan': 999, 'eve': 111}Akses kurung siku mengambil nilai yang sudah ada. Assignment dengan kurung siku memperbarui kunci lama atau menambahkan pasangan kunci dan nilai baru ke insertion order.
Iterasi Dictionary
Pilih bentuk iterasi sesuai kebutuhanmu: kunci saja, nilai saja, atau kedua bagian setiap entri. Mengiterasi dictionary secara langsung menghasilkan kunci, memanggil .values() menghasilkan nilai, dan memanggil .items() menghasilkan pasangan kunci dan nilai.
Iterasi Kunci Dictionary
# Iterasi kunci dictionary
phone = {'ann': 110, 'bob': 999, 'cat': 112, 'dan': 999}
for key in phone:
print(key, phone[key])
# Output:
# ann 110
# bob 999
# cat 112
# dan 999Ketika dictionary dipakai langsung dalam for loop, Python menghasilkan setiap kunci sesuai insertion order.
Iterasi Entri Dictionary
# Iterasi pasangan kunci-nilai dengan items()
phone = {'ann': 110, 'bob': 999, 'cat': 112, 'dan': 999}
for key, val in phone.items():
print(key, val)
# Output:
# ann 110
# bob 999
# cat 112
# dan 999Method items() menghasilkan pasangan kunci dan nilai. Pada for key, val in phone.items(), Python melakukan unpacking pada setiap pasangan, lalu menyimpan kunci dalam key dan nilai dalam val.
Tiga Jenis Dictionary View
Method keys(), values(), dan items() menghasilkan dictionary view yang berbeda. View tetap terhubung ke dictionary asal, sehingga perubahan pada dictionary juga muncul pada view tersebut.
Membuat Dictionary View
# Menggunakan dictionary method
phone = {'ann': 110, 'bob': 991, 'cat': 112, 'dan': 999}
# Mendapatkan semua kunci
keys = phone.keys()
print("Kunci:", list(keys))
# Output: Kunci: ['ann', 'bob', 'cat', 'dan']
# Mendapatkan semua nilai
values = phone.values()
print("Nilai:", list(values))
# Output: Nilai: [110, 991, 112, 999]
# Mendapatkan pasangan kunci-nilai
items = phone.items()
print("Items:", list(items))
# Output: Items: [('ann', 110), ('bob', 991), ('cat', 112), ('dan', 999)]
snapshot = list(keys)
phone['eve'] = 111
print(list(keys)) # Output: ['ann', 'bob', 'cat', 'dan', 'eve']
print(snapshot) # Output: ['ann', 'bob', 'cat', 'dan']Ketiga view dapat diiterasi, tetapi tidak menyediakan indeks posisi atau penggantian item. list() membuat snapshot entri saat itu. Penambahan kunci berikutnya muncul pada view, tetapi tidak pada snapshot. Jika suatu value adalah objek mutable, snapshot masih memegang referensi ke objek yang sama.
Nilai Pengganti untuk Kunci yang Hilang
Gunakan get() jika kunci mungkin tidak ada dan kamu ingin menerima nilai pengganti. Gunakan kurung siku jika kunci yang hilang harus menghasilkan error. Perbedaan ini penting saat membaca data masukan: satu cara menjaga program tetap berjalan dengan nilai pengganti, cara lainnya menghentikan program supaya kesalahan terlihat.
Error saat Mengakses Kunci dengan Kurung Siku
# Masalah mengakses kunci yang tidak ada
phone = {'ann': 110, 'bob': 991, 'cat': 112, 'dan': 999}
try:
print(phone['pat'])
except KeyError as e:
print("KeyError:", e)
# Output: KeyError: 'pat'Mengakses kunci yang tidak ada dengan kurung siku menghasilkan KeyError.
Memakai Method Get
# Menggunakan method get() untuk akses aman
phone = {'ann': 110, 'bob': 991, 'cat': 112, 'dan': 999}
# get() mengembalikan None jika kunci tidak ada
result = phone.get('pat')
print("Hasil get('pat'):", result)
# Output: Hasil get('pat'): None
# get() dengan nilai default
result = phone.get('pat', -1)
print("Hasil get('pat', -1):", result)
# Output: Hasil get('pat', -1): -1
# get() untuk kunci yang ada
result = phone.get('ann')
print("Hasil get('ann'):", result)
# Output: Hasil get('ann'): 110get() mengembalikan value yang tersimpan ketika key ditemukan. Jika key tidak ditemukan, method ini mengembalikan default value yang diberikan, atau None bila default value tidak ditentukan. Pilih default value yang tidak dapat tertukar dengan value yang sah ketika kedua keadaan perlu dibedakan.