2017-07-28 130 views
0

我想知道下面的映射器和減速器函數是否有任何問題。這是項目的在Udacity的介紹對數據科學課程的一部分Python中的映射器和減速器函數

def mapper(): 
    dic={} 
    for line in sys.stdin: 
     data=line.strip().split(" ") 
     for i in data: 
      dic[i]=1 
    for key, value in dic.iteritems(): 
     print key,'\t', value 

這裏值輸入作爲字符串用空格和功能分隔的單詞返回與字符串的每個字字典作爲「鑰匙」,它的計數1作爲'價值'。

def reducer(): 
    dic={} 
    for line in sys.stdin: 
     data=line.strip().split('\t') 
     if data[0] in dic.keys(): 
      dic[data[0]]+=1 
     else: 
      dic[data[0]]=data[1] 
    for key, value in dic.iteritems(): 
     print key,'\t',value 

這裏的值是由字符串和計數1組成的字符串輸入的,由單詞和標籤分隔。兩個函數的執行都不相同。我沒有得到正確的輸出。

+0

你會得到什麼輸出? 你期待什麼輸出? 另外...對於這兩個函數,你必須在某個地方有一個'import sys',但是在你的代碼中沒有顯示。 –

+0

我已經在我的代碼中寫入了導入sys ..只是忘了在這裏提到它! –

回答

0

這將有助於如果你告訴我們一些關於你所期望的輸出,但在dic[data[0]]=data[1]值是一個字符串,所以你將不能夠添加一個數字,如1它。

此外,當然減速機的一點是,它可能會運行多次,當輸入計數並不總是1,您可能想要添加實際值,而不是隻增加。

def reducer(): 
    dic=collections.defaultdict(int) 
    for line in sys.stdin: 
     key, value=line.strip().split('\t') 
     dic[key] += int(value) 
    for key, value in dic.iteritems(): 
     print key,'\t',value 
+0

實際上,我的輸出與解決方案不匹配。由我的職能產生的單詞的數量是不同的。我認爲增加價值有一些錯誤,但我無法弄清楚。 –