M. 427 wrote: > Version 4 : (2 steps) > > # step 1 : list keys of unwanted rows > sck=[] # list of single children keys in dictionary > for k in d.keys() : > if len(d[k]) < 2 : > sck.append(k) > # step 2 : delete all d rows whose key is listed in sck > while len(sck) > 0 : > del d[sck.pop()] > > This works. > Is this the optimal pythonic way of doing it?
Ceterum censeo: the pythonic way is to make a copy: d = dict((k, v) for k, v in d.iteritems() if len(v) > 1) As an optimization, if the dictionary is huge and there are relatively few items to be deleted you may fall back to the 2-step approach. I would write it delenda = [k for k, v in d.iteritems() if len(v) < 2] for k in delenda: del d[k] Peter _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor