Learning Python via a little word frequency program
Bruno Desthuilliers
bruno.42.desthuilliers at wtf.websiteburo.oops.com
Wed Jan 9 07:27:55 EST 2008
Ant a écrit :
>> I'm interested to learn how more experienced Python folks would solve
>> this little problem.
>
> I think I'd do the following:
>
> from collections import defaultdict
>
> names = "freddy fred bill jock kevin andrew kevin kevin jock"
> freq = defaultdict(lambda: 0)
>
> for name in names.split():
> freq[name] += 1
>
> pairs = [(v, k) for k, v in freq.iteritems()]
>
> for v, k in reversed(sorted(pairs)):
> print "%-10s: %d" % (k, v)
>
>
> defaultdict makes the frequency accumulation neater.
>
> reversed(sorted(pairs)) avoids the little -v hack and makes it more
> obvious what you are doing.
But fails to implement the specs (emphasis is mine):
"""
produce a frequency table of names, sorted descending by frequency.
*then ascending by name*. For the above data, the output should be:
kevin : 3
jock : 2
andrew : 1
bill : 1
fred : 1
freddy : 1
"""
With your solution, you get:
kevin : 3
jock : 2
freddy : 1
fred : 1
bill : 1
andrew : 1
More information about the Python-list
mailing list