dict.get()विधि क्या है ?
जैसा कि पहले ही उल्लेख किया गया है कि getविधि में एक अतिरिक्त पैरामीटर है जो लापता मूल्य को इंगित करता है। प्रलेखन से
get(key[, default])
कुंजी के लिए मान लौटाएं यदि कुंजी शब्दकोश में है, तो डिफ़ॉल्ट रूप से। यदि डिफ़ॉल्ट नहीं दिया गया है, तो यह किसी को भी नहीं चूकता है, ताकि यह विधि कभी भी न उठे KeyError।
एक उदाहरण हो सकता है
>>> 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
कहीं गति में सुधार हैं?
जैसा कि यहां बताया गया है ,
ऐसा लगता है कि सभी तीन दृष्टिकोण अब समान प्रदर्शन (एक दूसरे के लगभग 10% के भीतर), शब्दों की सूची के गुणों से अधिक या कम स्वतंत्र हैं।
पहले getकाफी धीमा था, हालांकि अब डिफ़ॉल्ट मूल्य को वापस करने के अतिरिक्त लाभ के साथ-साथ गति लगभग तुलनीय है। लेकिन हमारी सभी जिज्ञासाओं को दूर करने के लिए, हम एक बड़ी सूची पर परीक्षण कर सकते हैं (ध्यान दें कि परीक्षण में केवल सभी मान्य कुंजियाँ देखना शामिल है)
def getway(d):
for i in range(100):
s = d.get(i)
def lookup(d):
for i in range(100):
s = d[i]
अब इन दो कार्यों का उपयोग करते हुए समय 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
जैसा कि हम देख सकते हैं कि लुकअप फंक्शन की तुलना में तेज है क्योंकि इसमें फंक्शन लुकिंग नहीं है। इसके माध्यम से देखा जा सकता हैdis
>>> 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
यह कहां उपयोगी होगा?
जब भी आप डिक्शनरी देख रहे हों, तो जब भी आप डिफॉल्ट वैल्यू देना चाहते हैं, तो यह उपयोगी होगा। यह कम करता है
if key in dic:
val = dic[key]
else:
val = def_val
एक लाइन में, val = dic.get(key,def_val)
यह कहाँ उपयोगी नहीं होगा?
जब भी आप यह बताना चाहते हैं KeyErrorकि विशेष कुंजी उपलब्ध नहीं है। एक डिफ़ॉल्ट मान लौटाने से यह जोखिम भी होता है कि एक विशेष डिफ़ॉल्ट मान एक कुंजी भी हो सकता है!
क्या getफीचर में ऐसा होना संभव है dict['key']?
हाँ! हमें __missing__एक तानाशाह उपवर्ग में लागू करने की जरूरत है ।
एक नमूना कार्यक्रम हो सकता है
class MyDict(dict):
def __missing__(self, key):
return None
एक छोटा प्रदर्शन हो सकता है
>>> my_d = MyDict({1:2,2:3})
>>> my_d[1]
2
>>> my_d[3]
>>> repr(my_d[3])
'None'
dictionary["foo"]औरdictionary.get("foo")यद्यपि अलग व्यवहार करते हैं।