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?

Mr. 427


Le vendredi 17 septembre 2010 à 21:36 -0400, bob gailer a écrit :
> On 9/17/2010 9:21 PM, M. 427 wrote:
> > Thank you,
> > After reading the following documentations
> > http://docs.python.org/tutorial/datastructures.html#looping-techniques
> > http://docs.python.org/tutorial/controlflow.html#for-statements
> > I ended up with this :
> >
> > Version 3 :
> > for i,row in d[:].iteritems() : # BUG : TypeError: unhashable type
> >      if len(row)<  2 :
> >          del d[i]
> >
> > Still buggy... Any lead for this error message? Is a slice unhashable?
> > Am I looking in the right direction for this task?
> Where did you see [:] after a dict? [:] is slicing, and applies to a 
> sequence not a mapping.
> 
> Also note the warning "Using iteritems()  while adding or deleting 
> entries in the dictionary may raise a RuntimeError  or fail to iterate 
> over all entries."
> 
> You should get a list rather than an iterator of all key-value pairs 
> then iterate over that list.
> 


_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to