DÜZENLE:
Bu cevap Python3 için çalışmayacak ve bir RuntimeError
.
RuntimeError: yineleme sırasında sözlük boyutu değişti.
Bu olur çünkü mydict.keys()
liste değil yineleyici döndürmesi ile . Yorumlarda belirtildiği gibi sadece mydict.keys()
bir listeye dönüştürün list(mydict.keys())
ve çalışması gerekir.
Konsoldaki basit bir test, bir sözlüğü tekrar ederken değiştiremeyeceğinizi gösterir:
>>> 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
Delnan'ın cevabında belirtildiği gibi, yineleyici bir sonraki girişe geçmeye çalıştığında girişleri silmek sorunlara neden olur. Bunun yerine,keys()
anahtarların bir listesini almak ve bununla çalışmak yöntemi kullanın:
>>> for k in mydict.keys():
... if k == 'two':
... del mydict[k]
...
>>> mydict
{'four': 4, 'three': 3, 'one': 1}
Öğeler değerine göre silmeniz gerekiyorsa items()
bunun yerine yöntemi kullanın:
>>> for k, v in mydict.items():
... if v == 3:
... del mydict[k]
...
>>> mydict
{'four': 4, 'one': 1}