letter frequency counter / your thoughts..
Paul Melis
paul at floorball-flamingos.nl
Wed May 7 13:30:12 EDT 2008
umpsumps at gmail.com wrote:
> Here is my code for a letter frequency counter. It seems bloated to
> me and any suggestions of what would be a better way (keep in my mind
> I'm a beginner) would be greatly appreciated..
Not bad for a beginner I think :)
> def valsort(x):
> res = []
> for key, value in x.items():
> res.append((value, key))
> return res
>
> def mostfreq(strng):
> dic = {}
> for letter in strng:
> if letter not in dic:
> dic.setdefault(letter, 1)
> else:
> dic[letter] += 1
> newd = dic.items()
> getvals = valsort(newd)
> getvals.sort()
> length = len(getvals)
> return getvals[length - 3 : length]
>
> thanks much!!
Slightly shorter:
def mostfreq(strng):
dic = {}
for letter in strng:
if letter not in dic:
dic[letter] = 0
dic[letter] += 1
# Swap letter, count here as we want to sort on count first
getvals = [(pair[1],pair[0]) for pair in dic.iteritems()]
getvals.sort()
return getvals[-3:]
I'm not sure if you wanted the function mostfreq to return the 3 most
frequent letters of the first 3 letters? It seems to do the latter. The
code above uses the former, i.e. letters with highest frequency.
Paul
More information about the Python-list
mailing list