["python","dictionary"]
How to delete items from a dictionary while iterating over it?

Can I delete items from a dictionary in Python while iterating over it? I want to remove elements that don't meet a certain condition from the dictionary, instead of creating an entirely new dictionary. Is the following a good solution, or are there better ways? for k, v in mydict.items(): if k == val: del mydict[k]
For Python 3+: >>> mydict {'four': 4, 'three': 3, 'one': 1} >>> for k in list(mydict.keys()): ... if mydict[k] == 3: ... del mydict[k] >>> mydict {'four': 4, 'one': 1} The other answers work fine with Python 2 but raise a RuntimeError for Python 3: RuntimeError: dictionary changed size during iteration. This happens because mydict.keys() returns an iterator not a list. As pointed out in comments simply convert mydict.keys() to a list by list(mydict.keys()) and it should work. For Python 2: A simple test in the console shows you cannot modify a dictionary while iterating over it: >>> 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 As stated in delnan's answer, deleting entries causes problems when the iterator tries to move onto the next entry. Instead, use the keys() method to get a list of the keys and work with that: >>> for k in mydict.keys(): ... if k == 'two': ... del mydict[k] >>> mydict {'four': 4, 'three': 3, 'one': 1} If you need to delete based on the items value, use the items() method instead: >>> for k, v in mydict.items(): ... if v == 3: ... del mydict[k] >>> mydict {'four': 4, 'one': 1}