Apa dict.get()metodenya?
Seperti telah disebutkan getmetode ini berisi parameter tambahan yang menunjukkan nilai yang hilang. Dari dokumentasi
get(key[, default])
Kembalikan nilai untuk kunci jika kunci ada di kamus, kalau tidak default. Jika default tidak diberikan, defaultnya adalah None, sehingga metode ini tidak pernah memunculkan a KeyError.
Contohnya bisa
>>> d = {1:2,2:3}
>>> d[1]
2
>>> d.get(1)
2
>>> d.get(3)
>>> repr(d.get(3))
'None'
>>> d.get(3,1)
1
Apakah ada peningkatan kecepatan di mana saja?
Seperti yang disebutkan di sini ,
Tampaknya ketiga pendekatan sekarang menunjukkan kinerja yang sama (sekitar 10% dari satu sama lain), lebih atau kurang independen dari sifat daftar kata.
Sebelumnya getjauh lebih lambat, Namun sekarang kecepatannya hampir sebanding dengan keuntungan tambahan mengembalikan nilai default. Tetapi untuk menghapus semua pertanyaan kami, kami dapat menguji pada daftar yang cukup besar (Perhatikan bahwa tes ini mencakup mencari semua kunci yang valid saja)
def getway(d):
for i in range(100):
s = d.get(i)
def lookup(d):
for i in range(100):
s = d[i]
Sekarang pengaturan waktu kedua fungsi ini menggunakan timeit
>>> import timeit
>>> print(timeit.timeit("getway({i:i for i in range(100)})","from __main__ import getway"))
20.2124660015
>>> print(timeit.timeit("lookup({i:i for i in range(100)})","from __main__ import lookup"))
16.16223979
Seperti yang bisa kita lihat, pencarian lebih cepat daripada pencarian karena tidak ada fungsi pencarian. Ini bisa dilihat melaluidis
>>> def lookup(d,val):
... return d[val]
...
>>> def getway(d,val):
... return d.get(val)
...
>>> dis.dis(getway)
2 0 LOAD_FAST 0 (d)
3 LOAD_ATTR 0 (get)
6 LOAD_FAST 1 (val)
9 CALL_FUNCTION 1
12 RETURN_VALUE
>>> dis.dis(lookup)
2 0 LOAD_FAST 0 (d)
3 LOAD_FAST 1 (val)
6 BINARY_SUBSCR
7 RETURN_VALUE
Di mana itu akan berguna?
Ini akan berguna setiap kali Anda ingin memberikan nilai default setiap kali Anda mencari kamus. Ini mengurangi
if key in dic:
val = dic[key]
else:
val = def_val
Untuk satu baris, val = dic.get(key,def_val)
Di mana itu TIDAK berguna?
Setiap kali Anda ingin mengembalikan KeyErrorpernyataan bahwa kunci tertentu tidak tersedia. Mengembalikan nilai default juga membawa risiko bahwa nilai default tertentu juga bisa menjadi kunci!
Apakah mungkin untuk memiliki getfitur serupa dict['key']?
Iya! Kita perlu mengimplementasikan __missing__subclass dict.
Contoh program bisa
class MyDict(dict):
def __missing__(self, key):
return None
Demonstrasi kecil bisa
>>> my_d = MyDict({1:2,2:3})
>>> my_d[1]
2
>>> my_d[3]
>>> repr(my_d[3])
'None'
dictionary["foo"]dandictionary.get("foo")berperilaku berbeda.