Я пытаюсь подсчитать частоту слов в тексте, а затем отсортировать их по убыванию частоты. Таким образом, если два слова имеют одинаковую частоту, они должны оставаться в том же порядке, в котором они впервые появились в исходном тексте (а не в алфавитном порядке). Чтобы понять это, посмотрите пример ниже:
Пример ввода:
После преобразования в нижний регистр ожидаемый результат:
Код: Выделить всё
{"i": 2, "hi": 1, "live": 1, "in": 1, "america": 1, "love": 1, "cooking": 1}
Текущий подход:
Код: Выделить всё
words = input().lower().split()
d = {i: words.count(i) for i in words}
dk = list(d.keys())
dv = sorted(d.values())[::-1]
sd = sorted(d.items())
nd = dict()
for i in dv:
for j in dk:
if d[j] == i:
nd[j] = i
print(nd)
Это работает, но вызовwords.count() для каждого элемента делает временную сложность очень низкой, а вложенные циклы еще больше ее ухудшают. Я не могу придумать лучший алгоритм для замены этого.
Подробнее здесь:
https://stackoverflow.com/questions/798 ... original-k