2012-10-02 133 views
1

我需要幫助進行一項名爲strcount(S)的功能,該功能返回一個字詞作爲關鍵字以及一個詞作爲相應值出現的次數。輸出應該是這樣的:統計獨特詞彙並在Python中創建詞典和計數的詞典

strcount("a a a a b b") 
{'a': 4, 'b': 2} 
strcount("one") 
{'one': 1} 
sorted(strcount("this one and that one for one time").items()) 
[('and', 1), ('for', 1), ('one', 3), ('that', 1), ('this', 1), ('time', 1)] 
+1

你有什麼如此遠? –

回答

3

最Python化的解決方案是使用collections.Counter

>>> from collections import Counter 
>>> Counter("this one and that one for one time".split()).items() 
[('and', 1), ('for', 1), ('that', 1), ('this', 1), ('one', 3), ('time', 1)] 

如果你想寫自己的解決方案,我會嘗試這樣的:

  1. 將字符串拆分爲單詞列表。你可以使用.split()
  2. 構造一個字典,其中每個鍵是一個字,值爲0
  3. 迭代您的單詞列表。對於每個單詞,請將1添加到your_dict[word]
0

@ Blender的答案使用Counter很不錯,但是它的Python版本爲2.7及以上版本。

這裏是一個替代的解決方案,對於低版本的Python的工作原理:

from collections import defaultdict 

word_freq = defaultdict(int) 
for i in "this one and that one for this one".split(): 
    word_freq[i] += 1 

這會給你:

>>> word_freq 
defaultdict(<type 'int'>, {'this': 2, 'and': 1, 'that': 1, 'for': 1, 'one': 3}) 
>>> word_freq['one'] 
3 
0

或者,您也可以實現自己的算法,而無需使用Counter

def countwords(A): 
    dic = {} 
    for item in A.split(): 
     if dic.has_key(item): 
      dic[item] += 1 
     else: 
      dic[item] = 1 

    return sorted(dic.items()) # return sorted list. 

如果您正在使用Python 3.x中替換下面的行:

if dic.has_key(item): 

有:

if item in dic: 

輸出:

>>> print (countwords("this one and that one for one time")) 
[('and', 1), ('for', 1), ('one', 3), ('that', 1), ('this', 1), ('time', 1)]