Nedir dict.get()
yöntemi?
Daha önce de belirtildiği gibi, get
yöntem eksik değeri gösteren ek bir parametre içerir. Belgelerden
get(key[, default])
Anahtar sözlükte ise anahtarın değerini döndürür, aksi takdirde varsayılan değerdir. Varsayılan belirtilmezse, varsayılan olarak Yok olarak ayarlanır, böylece bu yöntem hiçbir zaman a değerini yükseltmez KeyError
.
Bir örnek olabilir
>>> 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
Herhangi bir yerde hız iyileştirmeleri var mı?
As söz burada ,
Görünüşe göre, üç yaklaşımın hepsi de, kelime listesinin özelliklerinden aşağı yukarı bağımsız olarak benzer bir performans sergiliyor (birbirlerinin yaklaşık% 10'u içinde).
Daha erken get
oldukça yavaştı, Ancak şimdi hız neredeyse varsayılan değeri döndürme ek avantajı ile karşılaştırılabilir. Ancak tüm sorgularımızı silmek için oldukça büyük bir listede test edebiliriz (Testin yalnızca tüm geçerli anahtarları aramayı içerdiğini unutmayın)
def getway(d):
for i in range(100):
s = d.get(i)
def lookup(d):
for i in range(100):
s = d[i]
Şimdi bu iki işlevi kullanarak 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
Gördüğümüz gibi, hiçbir işlev araması olmadığından, arama alma işleminden daha hızlıdır. Bu aracılığıyla görülebilirdis
>>> 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
Nerede yararlı olacak?
Bir sözlük ararken varsayılan bir değer vermek istediğinizde yararlı olacaktır. Bu azalır
if key in dic:
val = dic[key]
else:
val = def_val
Tek bir satıra, val = dic.get(key,def_val)
Nerede yararlı DEĞİLDİR?
KeyError
Belirli bir anahtarın kullanılamadığını belirten bir geri dönmek istediğinizde . Varsayılan değerin döndürülmesi, belirli bir varsayılan değerin de anahtar olması riskini taşır!
İçinde get
benzer bir özellik olması mümkün mü dict['key']
?
Evet! __missing__
Bir diksiyon alt sınıfını uygulamamız gerekir .
Örnek bir program
class MyDict(dict):
def __missing__(self, key):
return None
Küçük bir gösteri olabilir
>>> my_d = MyDict({1:2,2:3})
>>> my_d[1]
2
>>> my_d[3]
>>> repr(my_d[3])
'None'
dictionary["foo"]
vedictionary.get("foo")
farklı davranıyorlar.