Я разбираю длинную строку текста и вычисляю количество раз, когда каждое слово происходит в Python. У меня есть функция, которая работает, но я ищу советы о том, есть ли способы сделать ее более эффективной (с точки зрения скорости) и есть ли даже функции библиотеки python, которые могли бы сделать это для меня, поэтому я не изобретаю колесо ?Эффективно вычислять частоту слов в строке
Можете ли вы предложить более эффективный способ вычисления наиболее распространенных слов, которые встречаются в длинной строке (обычно более 1000 слов в строке)?
Также как лучше всего отсортировать словарь в списке, где 1-й элемент является самым распространенным словом, второй элемент является вторым наиболее распространенным словом и т. Д.?
test = """abc def-ghi jkl abc
abc"""
def calculate_word_frequency(s):
# Post: return a list of words ordered from the most
# frequent to the least frequent
words = s.split()
freq = {}
for word in words:
if freq.has_key(word):
freq[word] += 1
else:
freq[word] = 1
return sort(freq)
def sort(d):
# Post: sort dictionary d into list of words ordered
# from highest freq to lowest freq
# eg: For {"the": 3, "a": 9, "abc": 2} should be
# sorted into the following list ["a","the","abc"]
#I have never used lambda's so I'm not sure this is correct
return d.sort(cmp = lambda x,y: cmp(d[x],d[y]))
print calculate_word_frequency(test)
'has_key' осуждается. Вместо этого используйте 'key in d'. Кроме того, ваша функция сортировки довольно неправильная. 'return sorted (d, key = d .__ getitem__, reverse = True)' будет делать нисходящую сортировку по частоте и возвращать ключи. – agf