Date: Mon, 20 Jun 2011 03:00:27 +1000 From: Lie Ryan User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110513 Lightning/1.0b3pre Thunderbird/3.1.10 ThunderBrowse/3.3.5 MIME-Version: 1.0 Newsgroups: comp.lang.python Subject: Re: How to iterate on a changing dictionary References: In-Reply-To: X-Enigmail-Version: 1.1.2 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit NNTP-Posting-Host: 110.175.240.90 X-Original-NNTP-Posting-Host: 110.175.240.90 Message-ID: <4dfe2b95$1@dnews.tpgi.com.au> X-Trace: dnews.tpgi.com.au!tpg.com.au 1308502933 110.175.240.90 (20 Jun 2011 03:02:13 +1000) Lines: 28 Path: csiph.com!x330-a1.tempe.blueboxinc.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!news.alt.net!news.kjsl.com!rahul.net!wasp.rahul.net!rahul.net!nntp1.phx1.gblx.net!nntp.gblx.net!nntp.gblx.net!nntp3.phx1!dnews.tpgi.com.au!tpg.com.au!not-for-mail Xref: x330-a1.tempe.blueboxinc.net comp.lang.python:7986 On 06/20/11 00:32, TheSaint wrote: > Hello > > Trying to pop some key from a dict while is iterating over it will cause an > exception. > How I can remove items when the search result is true. > > Example: > > while len(dict): > for key in dict.keys(): > if dict[key] is not my_result: > dict.pop(key) > else: > condition_to_break > print('Dictionary is over') Others has described how to do what you wanted to do, but let's address the main problem here, why are you iterating a dictionary? I found that most of the time that I thought I needed to iterate through a dictionary, it's really because I'm thinking the wrong way, and a little bit more thought lead me to a better way that doesn't involve iterating on the dictionary. While there are legitimate reasons for iterating a dictionary, I'd consider the alternatives first.