Brian van den Broek wrote:
<SNIP>
Thanks Wolfram,
I knew someone would improve what I posted. (It can always be done ;-)
for i in a_list: if i in items_dict: items_dict[i] = items_dict[i] + 1 else: items_dict[i] = 1
get(key, default) is your friend here: for i in a_list: items_dict[i] = items_dict.get(i, 0) + 1
get() (and his "brother" setdefault()) are mighty dictionary-methods.
What a brain fart I had! I even got as far as reading then entry in the Library Ref Mapping Types table for setdefault, 'cause I knew there was a way to do this, but couldn't recall it. How they expect me to find it when they hide it on the previous line I'll never know ;-) / :-[
for key in items_dict.copy(): # Try it without the .copy() if items_dict[key] == 1: # and see what happens. del items_dict[key]
dict_keys = items_dict.keys() dict_keys.sort()
>
for key in dict_keys: print '%s occurred %s times' %(key, items_dict[key])
This whole part can be rewritten (without sorting, but in Py2.4 you can use sorted() for this) with a list comprehension (Old Python2.1 style, with a newer version the keys() aren't needed):
for k,v in [(k, items_dict[k]) \
for k in items_dict.keys() if items_dict[k] > 1]:
print '%s occurred %s times' %(key, items_dict[key])
I knew sorted() only from the 'What's New in 2.4'. Thanks for reminding me to look closer.
I get that the for loops in mine are more costly than the list comps in yours. But, I can't help but feel that the list comp isn't as clear or readable. Of course, that may say more about me (and the fact that while I can read list comps, they aren't really in my working vocabulary yet) than it does about the code. I think I like the way I wrote it in that it breaks the discrete steps apart. But, for long lists, that will be a performance bite indeed.
(I went from my first posts being too concerned about speed to not giving a toss. Perhaps the pendulum needs to swing back a bit.)
Anyway, thanks for showing me (and the OP) these alternatives!
Best,
Brian vdB
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor