Bagaimana dan Kapan Anda Harus Menggunakan Defaultdict dengan Python?
Diterbitkan: 2022-10-06Dalam tutorial ini, Anda akan belajar bagaimana menggunakan defaultdict dari modul koleksi Python—untuk menangani KeyErrors dengan lebih baik—saat bekerja dengan kamus Python.
Di Python, kamus adalah struktur data bawaan yang kuat yang menyimpan data dalam pasangan nilai kunci. Anda akan menggunakan tombol untuk masuk ke kamus dan mengakses nilainya.
Namun, ketika Anda memiliki beberapa kamus dalam skrip Python yang dimodifikasi selama eksekusi kode, Anda akan sering mengalami KeyErrors. Dan ada beberapa cara berbeda untuk menanganinya.
Dalam tutorial ini, Anda akan belajar:
- Apa itu KeyError dan mengapa muncul
- Bagaimana menangani KeyErrors
- Cara menggunakan defaultdict Python, subclass yang mewarisi dari kelas dict bawaan, untuk menangani kunci yang hilang dengan lebih baik
Mari kita mulai!
Apa itu KeyError di Python?

Saat mendefinisikan kamus Python, Anda harus berhati-hati untuk memastikan hal berikut:
- Kunci harus unik – tanpa pengulangan.
- Saat menggunakan iterable yang ada sebagai kunci kamus, Anda harus lebih suka menggunakan koleksi yang tidak dapat diubah seperti Tuple.
Jadi kunci hanya valid jika ada dalam kamus; lain itu mengarah ke KeyErrors.
Perhatikan kamus berikut, books_authors
, di mana kuncinya adalah nama buku dan nilainya adalah nama penulisnya.
Anda dapat membuat kode bersama dengan tutorial ini dalam Python REPL.
books_authors = { 'Deep Work':'Cal Newport', 'Hyperfocus':'Chris Bailey', 'Pivot':'Jenny Blake', 'The Happiness Equation':'Neil Pasricha' }
Anda dapat menggunakan kunci (nama buku) untuk mengakses nama penulis.
books_authors['Hyperfocus'] 'Chris Bailey'
Untuk mengakses semua pasangan nilai kunci dalam kamus, Anda dapat memanggil metode items()
pada objek kamus, seperti yang ditunjukkan di bawah ini:
for book,author in books_authors.items(): print(f"'{book}' by {author}")
'Deep Work' by Cal Newport 'Hyperfocus' by Chris Bailey 'Pivot' by Jenny Blake 'The Happiness Equation' by Neil Pasricha
Jika Anda mencoba mengakses nilai kunci yang tidak ada dalam kamus, interpreter Python memunculkan KeyError. Kami mengalami KeyError ketika kami mencoba mengakses nilai kunci yang tidak ada, yaitu 'Grit' dan 'non-existent key'.
books_authors['Grit']
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-6-e1a4486f5ced> in <module> ----> 1 books_authors['Grit'] KeyError: 'Grit'
books_authors['non-existent-key']
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-7-a3efd56f69e5> in <module> ----> 1 books_authors['non-existent-key'] KeyError: 'non-existent-key'
Jadi bagaimana Anda menangani KeyErrors dengan Python?
Ada beberapa cara untuk melakukannya, dan kita akan mempelajarinya di bagian selanjutnya.
Bagaimana Menangani KeyErrors dengan Python

Mari pelajari cara menangani KeyErrors menggunakan:
- Pernyataan bersyarat if-else
- Coba-kecuali blok
- Metode kamus
.get()
#1. Menggunakan Pernyataan Kondisional If-Else
Salah satu cara paling sederhana untuk menangani KeyErrors dengan Python adalah menggunakan pernyataan kondisional if-else.
Dalam Python, pernyataan if-else memiliki sintaks umum berikut:
if condition: # do this else: # do something else
- Jika kondisinya
True
, pernyataan dalam tubuhif
dieksekusi, dan - Jika kondisinya
False
, pernyataan di badanelse
dieksekusi.
Dalam contoh ini, kondisinya adalah untuk memeriksa apakah kunci ada dalam kamus.
Jika kunci ada dalam kamus, operator in
akan mengembalikan True
, dan jika body akan dieksekusi mencetak nilai yang sesuai.
key = 'The Happiness Equation' if key in books_authors: print(books_authors[key]) else: print('Sorry, this key does not exist!') # Output # Neil Pasricha
Jika kunci tidak ada dalam kamus, operator in
mengembalikan False
dan badan else
akan dieksekusi. Ini mencetak pesan bahwa kuncinya tidak ada.
key = 'non-existent-key' if key in books_authors: print(books_authors[key]) else: print('Sorry, this key does not exist!') # Output # Sorry, this key does not exist!
#2. Menggunakan Pernyataan Coba-Kecuali

Metode umum lainnya untuk menangani KeyError adalah menggunakan pernyataan try-except dengan Python.
Baca melalui blok kode berikut:
key = 'non-existent-key' try: print(books_authors[key]) except KeyError: print('Sorry, this key does not exist!')
- Blok coba mencoba untuk mengambil nilai yang sesuai dengan kunci yang disediakan.
- Jika kunci tidak ada, interpreter memunculkan KeyError yang ditangani sebagai pengecualian di dalam blok kecuali .
#3. Menggunakan Metode .get()
Di Python, Anda dapat menggunakan metode kamus bawaan .get() untuk menangani kunci yang hilang.
Sintaks umum untuk menggunakan metode
get()
adalahdict.get(key,default_value)
di manadict
adalah objek kamus yang valid dengan Python.– Jika kunci ada dalam kamus, maka metode
get()
mengembalikan nilai.
– Jika tidak, ia mengembalikan nilai default.
Dalam contoh ini, keys
adalah daftar kunci yang nilainya ingin kita akses. Kami mengulang daftar kunci untuk mengambil nilai yang sesuai dari kamus books_authors
.
Di sini, kami telah menggunakan metode .get() dengan 'Tidak ada' sebagai nilai default.
keys = ['Grit','Hyperfocus','Make Time','Deep Work'] for key in keys: print(books_authors.get(key,'Does not exist'))
Dalam kode di atas:

- Untuk kunci yang ada dalam kamus
books_authors
, metode .get.get()
mengembalikan nilai yang sesuai. - Ketika kunci tidak ada, dalam hal ini, 'Grit' dan 'Make Time', metode .get() mengembalikan nilai default 'Tidak ada'.
# Output Does not exist Chris Bailey Does not exist Cal Newport
Semua metode di atas membantu kami dalam menangani kesalahan kunci. Namun, mereka bertele-tele dan mengharuskan kita untuk secara eksplisit menangani kunci yang hilang. Anda dapat menyederhanakan proses ini dengan menggunakan defaultdict alih-alih kamus biasa.
Defaultdict dengan Python

Defaultdict adalah subclass dari kelas kamus ( dict
). Jadi itu mewarisi perilaku kamus Python. Selain itu, ia juga menangani kunci yang hilang secara asli.
Defaultdict adalah tipe data container yang dibangun ke dalam library standar Python – di dalam modul collections
.
Jadi, Anda harus mengimpornya ke lingkungan kerja Anda:
from collections import defaultdict
Berikut sintaks umum untuk menggunakan defaultdict
:
defaultdict(default_factory)
Anda dapat menentukan callable seperti int, float, atau list sebagai atribut default_factory
. Jika Anda tidak memberikan nilai untuk default_factory
, defaultnya adalah None
.
Ketika kunci yang Anda cari tidak ada, metode __missing__()
dipicu, dan itu menyimpulkan nilai default dari default_factory
. Kemudian mengembalikan nilai default ini.
Kesimpulan:
- Dalam Python,
defaultdict
mengembalikan nilai default saat kunci tidak ada. - Itu juga menambahkan pasangan nilai kunci-default ini ke kamus, yang kemudian dapat Anda modifikasi.
Contoh Defaultdict Python

Selanjutnya, kita akan membuat kode beberapa contoh untuk memahami cara kerja defaultdict Python.
Defaultdict dengan Python dengan Nilai Integer Default
Pertama, impor defaultdict
dari modul collections
.
from collections import defaultdict import random
Mari kita buat prices
defaultdict.
prices = defaultdict(int)
Kami sekarang mengisi kamus prices
menggunakan item dari daftar fruits
-buahan sebagai kuncinya. Dan kami mengambil sampel nilai secara acak dari price_list
untuk mendapatkan nilainya.
price_list = [10,23,12,19,5] fruits = ['apple','strawberry','pomegranate','blueberry'] for fruit in fruits: prices[fruit] = random.choice(price_list)
Mari kita lihat pasangan nilai kunci dalam prices
defaultdict.
print(prices.items())
dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10)])
Seperti kamus Python biasa, Anda dapat mengakses nilai prices
defaultdict menggunakan kunci:
prices['apple'] # 23
Sekarang, mari kita coba mengakses harga buah yang tidak ada, katakanlah, 'jeruk'. Kami melihat bahwa itu mengembalikan nilai default nol.
prices['orange'] # 0
Jika kita mencetak kamus, kita melihat bahwa kunci baru 'oranye' telah ditambahkan dengan nilai integer default nol.
print(prices.items())
dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10), ('orange', 0)])
Defaultdict dengan Python dengan Daftar sebagai Nilai Default
Mari kita definisikan students_majors
sebagai defaultdict
dari daftar. Nama-nama jurusan adalah kuncinya. Dan nilai-nilainya adalah daftar siswa yang mengejar masing-masing jurusan, seperti matematika, ekonomi, ilmu komputer, dan banyak lagi.
from collections import defaultdict students_majors = defaultdict(list)
Jika kita mencoba mengakses daftar siswa yang sesuai dengan 'Ekonomi', defaultdict mengembalikan daftar kosong; tidak ada kesalahan kunci!
students_majors['Economics'] # []
Kami sekarang memiliki daftar kosong yang dipetakan ke jurusan 'Ekonomi'. Jadi sekarang kita dapat menambahkan elemen ke daftar ini menggunakan metode daftar .append()
.
students_majors['Economics'].append('Alex')
Sebuah entri telah dibuat untuk 'Ekonomi' dalam kamus default students_majors
.
print(students_majors)
defaultdict(<class 'list'>, {'Economics': ['Alex']})
Anda dapat menambahkan lebih banyak siswa ke daftar pemetaan jurusan Ekonomi, menambahkan jurusan baru, dan banyak lagi!
students_majors['Economics'].append('Bob') students_majors['Math'].append('Laura') print(students_majors)
defaultdict(<class 'list'>, {'Economics': ['Alex', 'Bob'], 'Math': ['Laura']})
Kesimpulan
Saya harap tutorial ini membantu Anda memahami bagaimana dan kapan Anda harus menggunakan defaultdict di Python. Setelah menjalankan contoh kode dalam tutorial ini, Anda dapat mencoba menggunakan defaultdict sebagai struktur data pilihan dalam proyek Anda bila diperlukan.
Berikut adalah ringkasan dari apa yang telah Anda pelajari dalam tutorial ini.
- Saat bekerja dengan kamus Python, Anda akan sering mengalami KeyErrors.
- Untuk menangani KeyErrors seperti itu, Anda dapat menggunakan beberapa metode verbose. Anda dapat menggunakan pernyataan bersyarat, blok coba-kecuali, atau metode .get(). Tetapi tipe data defaultdict dalam modul collections dapat menyederhanakan penanganan KeyError ini.
- Anda dapat menggunakan defaultdict(default_factory) di mana default_factory adalah callable yang valid.
- Ketika kunci tidak ada di defaultdict, nilai default (disimpulkan dari default_factory ) dan kunci ditambahkan ke defaultdict.
Selanjutnya, lihat tutorial tentang fungsi peta Python.