2016-03-30 1 views
1

metin metnini ve pozitif bir tamsayı n alan bir işlevi yazmaya çalışıyorum ve metni bir sözcük listesine dönüştürür. Bir sözcük listesi döndürmeli ve n veya daha fazla kez metin metninde olmalıdır. Bu görevi gerçekleştirmek için bir sözlük kullanmaya çalışıyorum. Ben iade edilmesini istediğiniz neBir metinde n veya daha fazla kez oluşan sözcüklerin listesi nasıl verilir?

aşağıda belirtilmiştir:

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

Ben her kelime metin içinde meydana kaç kez saymak için bir sözlük kullanıyoruz.

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

Olay mahalinin 'için' ikinci doğru olmadığını biliyorum ama my_dict gelen değerler için büyük veya eşit olup olmadığını kontrol etmek nasıl bilmiyorum: Bu defa ne var n. Şimdiye kadar kodum o kadar iyi çalışmıyor. Herhangi bir yardım harika olurdu.

cevap

4

aşağıdaki döngü için son değiştirin:

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

de sıralama yapabilirsiniz gerekirse:

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

Sadece bir daha basit bir yaklaşım isteyen başkaları için:

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

Bunu yapmanın en iyi yolu, collections modülünden Counter kullanıyor.

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