python - एक अजगर शब्दकोश से एक कुंजी कैसे निकालें?




dictionary unset (4)

एक शब्दकोश से कुंजी हटाने की कोशिश करते समय, मैं लिखता हूं:

if 'key' in myDict:
    del myDict['key']

क्या ऐसा करने का एक लाइन तरीका है?


ऊपर वर्णित तीन समाधानों का समय।

छोटा शब्दकोश:

>>> 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

मुझे यह पता लगाने में कुछ समय लगा कि वास्तव में my_dict.pop("key", None) क्या कर रहा है। तो मैं दूसरों को गुगल समय बचाने के लिए इसे एक उत्तर के रूप में जोड़ दूंगा:

पॉप (कुंजी [, डिफ़ॉल्ट])

यदि कुंजी शब्दकोश में है, तो इसे हटा दें और अपना मान वापस कर दें, अन्यथा डिफ़ॉल्ट लौटाएं। यदि डिफ़ॉल्ट नहीं दिया गया है और कुंजी शब्दकोश में नहीं है, तो एक KeyError उठाया जाता है

Documentation


विशेष रूप से उत्तर देने के लिए "क्या ऐसा करने का एक लाइन तरीका है?"

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 उठाया जाता है।





unset