"Alan Gauld" <alan.ga...@btinternet.com> wrote
I ended up with this :
Version 3 :
for i,row in d[:].iteritems() : # BUG : TypeError: unhashable type
if len(row) < 2 :
del d[i]
You are getting too complicated.
You don't need the slice and you don't need iteritems.
You have a dictionary. When you iterate over a dictionary
what do you get? Don't know? Try it::
for x in {1:'foo',2:'bar'}: print x
...
1
2
So we get the keys. Now how do we use the keys to get the list?
Standard dictionary access:
print d[1]
foo
You know how to test the lenth of the list and delete the list so
put
that together as you did before:
for row in d : # row is actually the key
if len(row) == 1 : # so use the key to get the real row
del row # WRONG #' and delete the row, again using the key
Oops, as Peter pointed out that won't work because its changing
the iterable while we iterate. (I actually thought it would be OK
because the for would use a copy of the keys() list, but I was
wrong...)
But you can fix that with a list() call:
for row in list(d) : # generates a new list of the dict keys
if len(d[row]) == 1 : # so use the key to get the real row
del d[row]
HTH,
--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/
HTH,
--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor