2016-03-30 4 views
1

Ich versuche, eine Funktion zu schreiben, die eine Zeichenfolge Text und eine positive Ganzzahl n und konvertiert Text in eine Liste von Wörtern. Es muss eine Liste von Wörtern zurückgeben und n oder öfter in Text auftreten. Ich versuche, ein Wörterbuch zu benutzen, um diese Aufgabe zu erfüllen.Wie gibt man eine Liste von Wörtern zurück, die n oder mehrmals in einem Text vorkommen?

Was ich zurück will, ist in der folgenden:

>>> 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'] 

Ich habe ein Wörterbuch wurde mit zählen, wie oft jedes Wort im Text vorkommt. Das ist, was ich habe, so weit:

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()) 

Ich weiß, dass die zweite ‚für‘ Schleife nicht korrekt ist, aber ich weiß nicht, wie zu überprüfen, ob die Werte von my_dict sind größer oder gleich n. Bis jetzt funktioniert mein Code nicht so gut. Jede Hilfe wäre großartig.

Antwort

4

das Finale mit dem Ersetzen für Schleife folgende:

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

können Sie auch sortieren, wenn nötig:

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

nur für andere, die einen einfacheren Ansatz wollen:

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

Der beste Weg, dies zu tun ist Counter aus dem collections Modul.

>>> 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'] 
Verwandte Themen