Эффективно рассчитать частоту слов в строке

Я анализирую длинную строку текста и вычисляю, сколько раз каждое слово встречается в Python. У меня есть функция, которая работает, но я ищу совет о том, есть ли способы сделать ее более эффективной (с точки зрения скорости) и есть ли даже функции библиотеки Python, которые могли бы сделать это для меня, чтобы я не изобретал колесо ?

Можете ли вы предложить более эффективный способ вычисления наиболее распространенных слов, встречающихся в длинной строке (обычно более 1000 слов в строке)?

Кроме того, каков наилучший способ сортировки словаря в список, где 1-й элемент является наиболее распространенным словом, 2-й элемент является 2-м наиболее распространенным словом и т. Д.?

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)

Ответы на вопрос(3)

Ваш ответ на вопрос