2016-03-30 12 views
1

文字列のテキストと正の整数nをとり、テキストを単語のリストに変換する関数を記述しようとしています。それは単語のリストを返す必要がありますnまたはのテキストで発生します。私はこのタスクを達成するために辞書を使用しようとしています。私が返さ欲しいテキスト中でn回以上出現する単語のリストを返すには?

は以下である:

>>> repeat_word_count("buffalo buffalo buffalo buffalo", 2) 
['buffalo'] 
>>> repeat_word_count("one one was a racehorse two two was one too", 3) 
['one'] 
>>> repeat_word_count("how much wood could a wood chuck chuck", 1) 
['a', 'chuck', 'could', 'how', 'much', 'wood'] 

私は各単語がテキストで発生した回数をカウントするために辞書を使用してきました。

def repeat_word_count(text, n): 

    my_string = text.split() 
    my_dict = {} 
    for word in my_string: 
     if word in my_dict: 
      my_dict[word] += 1 
     else: 
      my_dict[word] = 1 

    for key, value in my_dict.items(): 
     if value >= n: 
      return sorted(my_dict.keys()) 

は私がループ「の」第二が正しくないことを知っているが、私はmy_dictからの値がに大きなまたは等しいかどうかを確認する方法がわからない:これは私がこれまで持っているものですn。これまでのところ私のコードはうまく動かない。どんな助けも素晴らしいだろう。

答えて

4

以下とループの最終を交換してください:

return [key for key, value in my_dict.items() if value >= n] 

あなたはまた、ソート、必要に応じて次のことができます。ただ、もっと単純なアプローチをしたい他の人のため

result = [key for key, value in my_dict.items() if value >= n] 
result.sort() 
return result 
1

def repeat_word_count(text, n): 

     my_string = text.split() 
     my_dict = {} 
     for word in my_string: 
      if word in my_dict: 
       my_dict[word] += 1 
      else: 
       my_dict[word] = 1 

     result = [] 
     for key, value in my_dict.items(): 
      if value >= n: 
       result.append(key) 
     return sorted(result) 
2

これを行う最も良い方法は、collectionsモジュールのCounterを使用することです。

>>> from collections import Counter 
>>> def repeat_word_count(text, n): 
...  return [key for key, value in Counter(text.split()).items() if value >= n] 
... 
>>> repeat_word_count("buffalo buffalo buffalo buffalo", 2) 
['buffalo'] 
>>> repeat_word_count("one one was a racehorse two two was one too", 3) 
['one'] 
>>> repeat_word_count("how much wood could a wood chuck chuck", 1) 
['a', 'much', 'how', 'could', 'chuck', 'wood'] 
関連する問題