2013-11-24 3 views
0

Как найти наиболее употребленное слово в строке, не импортируя ничего?Наиболее часто используемое слово в строке

>>> x = "In the sky, I fly fly away" 
>>> common(x) 
'fly' 

И это мой код до сих пор, но у меня проблемы.

def common(x): 
    dict = {} 
    for i in x: 
     try: 
      dict[i] += 1 
     except KeyError: 
      dict[i] = 1 
    return (sorted(dict.items(), key = lambda k: k[1], reverse = True)[:1]) 
+0

** Что ** проблемы вы с? –

ответ

2

Возвращает первый ключ вместо этого (в обратном порядке сортировки):

return sorted(dict, key=dict.get, reverse=True)[0] 

Старайтесь избегать имен ваших переменных dict; это маскирует встроенный тип и служит только для путаницы. Например, используйте count. Вот более простая версия:

def common(f): 
    count = {} 
    max = None 
    for i in f: 
     count[i] = count.get(i, 0) + 1 
     if count[i] > count.get(max, 0): 
      max = i 
    return max 

Обратите внимание, что эта версия полностью отменяет сортировку. Вместо этого мы обновляем max, когда мы соглашаемся с подсчетом.

Вы также должны помнить, чтобы разделить ваше предложение на слова первого:

>>> common(x.split()) 
'fly' 
+0

@Blckknght: yup, предназначенный для удаления лямбда, сделанный сейчас. –

+0

Я получил эту ошибку: count = count.get (i, 0) + 1 AttributeError: объект 'int' не имеет атрибута 'get' – BeginnersLuck

+0

@BeginnersLuck: Я исправил ошибку на ранней стадии; попробуйте еще раз. :-) –

0

В принципе, вы просто создать словарь подсчетов слов, обратный порядок сортировки и сделать первый элемент в списке. код ниже Python 3.

Примечание:Вам нужно будет настроить логику слова синтаксического анализа, чтобы удовлетворить ваши фантазии (например, игнорировать знаки препинания и т.д.).

решения Код не используя импорта

def get_word_counts(words): 
    word_list = words.split() 
    word_counts = {} 
    for word in word_list: 
     if word in word_counts.keys(): 
      word_counts[word] +=1 
     else: 
      word_counts[word] = 1 

    return word_counts.items() 

print(sorted(get_word_counts("In the sky, I fly fly away"), 
     key=lambda x: x[1], reverse=True)) 
print("Most frequent word in phrase is: ", 
     list(sorted(get_word_counts("In the sky, I fly fly away"), 
        key=lambda x: x[1], reverse=True))[0][0]) 

Я не совсем уверен, почему вы хотите сделать это без использования импорта, поскольку стандартная библиотека имеет более лаконичный способ, чтобы получить то же самое конечный результат.

код, который использует импорт (значительно короче)

print (sorted(Counter("In the sky, I fly fly away".split()).items(), 
     key=operator.itemgetter(1), reverse=True)) 
print("Most frequent word in phrase is: ", 
     sorted(Counter("In the sky, I fly fly away".split()).items(), 
     key=operator.itemgetter(1), reverse=True)[0][0]) 
+0

'Counter ('В небе, я летаю fly away.split()). Most_common() [0] [0]' –

+0

Будет ли решение кода, использующее импорт, работать для нескольких используемых слов? Пример: «Эй, ты, ты очень хорошенькая» - в этом случае оба «ты» и «очень» используются дважды. @Allan – BeginnersLuck

Смежные вопросы