Wolfram Kraus said unto the world upon 2005-01-27 03:24:
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

Reply via email to