python - एक अजगर शब्दकोश से एक कुंजी कैसे निकालें?
dictionary unset (4)
ऊपर वर्णित तीन समाधानों का समय।
छोटा शब्दकोश:
>>> import timeit
>>> timeit.timeit("d={'a':1}; d.pop('a')")
0.23399464370632472
>>> timeit.timeit("d={'a':1}; del d['a']")
0.15225347193388927
>>> timeit.timeit("d={'a':1}; d2 = {key: val for key, val in d.items() if key != 'a'}")
0.5365207354998063
बड़ा शब्दकोश:
>>> timeit.timeit("d={nr: nr for nr in range(100)}; d.pop(3)")
5.478138627299643
>>> timeit.timeit("d={nr: nr for nr in range(100)}; del d[3]")
5.362219126590048
>>> timeit.timeit("d={nr: nr for nr in range(100)}; d2 = {key: val for key, val in d.items() if key != 3}")
13.93129749387532
एक शब्दकोश से कुंजी हटाने की कोशिश करते समय, मैं लिखता हूं:
if 'key' in myDict:
del myDict['key']
क्या ऐसा करने का एक लाइन तरीका है?
मुझे यह पता लगाने में कुछ समय लगा कि वास्तव में my_dict.pop("key", None)
क्या कर रहा है। तो मैं दूसरों को गुगल समय बचाने के लिए इसे एक उत्तर के रूप में जोड़ दूंगा:
पॉप (कुंजी [, डिफ़ॉल्ट])
यदि कुंजी शब्दकोश में है, तो इसे हटा दें और अपना मान वापस कर दें, अन्यथा डिफ़ॉल्ट लौटाएं। यदि डिफ़ॉल्ट नहीं दिया गया है और कुंजी शब्दकोश में नहीं है, तो एक KeyError उठाया जाता है
विशेष रूप से उत्तर देने के लिए "क्या ऐसा करने का एक लाइन तरीका है?"
if 'key' in myDict: del myDict['key']
... अच्छा, आपने पूछा ;-)
आपको इस बात पर विचार करना चाहिए कि, किसी वस्तु से किसी ऑब्जेक्ट को हटाने का यह तरीका परमाणु नहीं myDict
यह संभव है कि if
कथन के दौरान myDict
'key'
हो, लेकिन del
निष्पादित होने से पहले हटा दिया जा सकता है, इस मामले में del
एक KeyError
साथ असफल। यह देखते हुए, या तो dict.pop
या कुछ के साथ कुछ उपयोग करने के लिए सबसे सुरक्षित होगा
try:
del myDict['key']
except KeyError:
pass
जो, ज़ाहिर है, निश्चित रूप से एक लाइनर नहीं है।
dict.pop()
प्रयोग करें:
my_dict.pop('key', None)
यह my_dict[key]
वापस करेगा यदि key
में key
मौजूद है, और None
अन्यथा नहीं। यदि दूसरा पैरामीटर निर्दिष्ट नहीं है (यानी my_dict.pop('key')
) और key
मौजूद नहीं है, तो KeyError
उठाया जाता है।