[EMAIL PROTECTED] wrote: > hi > I wish to pop/del some items out of dictionary while iterating over it. > a = { 'a':1, 'b':2 } > for k, v in a.iteritems(): > if v==2: > del a[k] > > the output say RuntimeError: dictionary changed size during iteration > how can i suppress this message in an actual script and still get the > final value of the dict? > is it something like try/except/else statment? > try: > for v,k in a.iteritems(): > if v==something: > del a[k] > except RuntimeError: > < don't know what to do here> > else: > < should i include this part ? > > > what other ways can i do this ? thanks for any help.
If you expect to delete only a few items: >>> a = dict(a=1, b=2, c=3, d=2) >>> delenda = [k for k, v in a.iteritems() if v == 2] >>> for k in delenda: ... del a[k] ... >>> a {'a': 1, 'c': 3} If you expect to delete most items: >>> a = dict(a=1, b=2, c=3, d=2) >>> a = dict((k, v) for k, v in a.iteritems() if v != 2) >>> a {'a': 1, 'c': 3} or (if rebinding a is not an option) >>> a = dict(a=1, b=2, c=3, d=2) >>> for k, v in a.items(): ... if v == 2: ... del a[k] ... >>> a {'a': 1, 'c': 3} Peter -- http://mail.python.org/mailman/listinfo/python-list