जवाब कितनी बार कुंजी dict में पहले से ही है पर निर्भर करता है (BTW, किसी को आप के लिए उल्लेख किया है कितना बुरा एक विचार यह एक चर के पीछे अंतर्निहित जैसे dict
को छिपाने के लिए है?)
if key not in dct:
dct[key] = foo
यदि कुंजी शब्दकोश में है तो यह एक शब्दकोश लुकअप करता है। यदि कुंजी शब्दकोश में है तो यह दो बार शब्दकोश को देखती है।
try:
dct[key]
except KeyError:
dct[key] = foo
इस मामले में जहां कुंजी शब्दकोश में है के लिए थोड़ा तेजी से हो सकता है, लेकिन कोई अपवाद फेंकने काफी बड़ा भूमि के ऊपर है, इसलिए यह लगभग हमेशा सबसे अच्छा विकल्प नहीं है।
dct.setdefault(key, foo)
यह एक थोड़ा मुश्किल है: यह हमेशा दो लुकअप शब्दकोश शामिल है: पहले एक dict
कक्षा में setdefault
विधि को मिल रहा है, दूसरी dct
वस्तु में key
देखने के लिए है। इसके अलावा यदि foo
एक अभिव्यक्ति है तो इसका मूल्यांकन हर बार किया जाएगा जबकि पहले के विकल्प केवल तब मूल्यांकन करेंगे जब उन्हें करना होगा।
collections.defaultdict
पर भी देखें। इस तरह की स्थितियों की एक बड़ी श्रेणी के लिए यह सबसे उपयुक्त समाधान है।
dict.setdefault विधि भी है: http://docs.python.org/release/2.6.6/library/stdtypes.html#mapping-types-dict – GWW
पहला ** ** रैखिक नहीं है खोज के। जैसे लैरी वॉल ने इसे लिखा: "एक सहयोगी सरणी पर रैखिक स्कैन करना किसी को उज्ज्वल उजी के साथ मारने की कोशिश करना है।" 'dict .__ has__' लगभग' dict के पहले 2/3 के समान ही है।__getitem__' (एक हैश लुकअप)। – delnan
यह एक महान उद्धरण है। – nmichaels