संपादित करें:
यह जवाब पायथन 3 के लिए काम नहीं करेगा और ए देगा RuntimeError
।
RuntimeError: शब्दकोश ने पुनरावृति के दौरान आकार बदल दिया।
ऐसा इसलिए होता है क्योंकि mydict.keys()
एक सूची में एक पुनरावृत्त रिटर्न देता है। जैसा कि टिप्पणियों में बताया गया है कि इसके mydict.keys()
द्वारा सूची में परिवर्तित list(mydict.keys())
हो जाना चाहिए और इसे काम करना चाहिए।
कंसोल में एक साधारण परीक्षण से पता चलता है कि आप एक शब्दकोश को संशोधित नहीं कर सकते, जबकि इस पर ध्यान दें:
>>> mydict = {'one': 1, 'two': 2, 'three': 3, 'four': 4}
>>> for k, v in mydict.iteritems():
... if k == 'two':
... del mydict[k]
...
------------------------------------------------------------
Traceback (most recent call last):
File "<ipython console>", line 1, in <module>
RuntimeError: dictionary changed size during iteration
जैसा कि डेलन के जवाब में कहा गया है, प्रविष्टियों को हटाने से समस्या आती है जब इट्रेटर अगली प्रविष्टि पर जाने की कोशिश करता है। इसके बजाय, keys()
कुंजियों की सूची प्राप्त करने के लिए विधि का उपयोग करें और उसी के साथ काम करें:
>>> for k in mydict.keys():
... if k == 'two':
... del mydict[k]
...
>>> mydict
{'four': 4, 'three': 3, 'one': 1}
यदि आपको आइटम मान के आधार पर हटाने की आवश्यकता है, तो items()
इसके बजाय विधि का उपयोग करें :
>>> for k, v in mydict.items():
... if v == 3:
... del mydict[k]
...
>>> mydict
{'four': 4, 'one': 1}