2017-07-28 24 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

实际上,我的输出与解决方案不匹配。由我的职能产生的单词的数量是不同的。我认为增加价值有一些错误,但我无法弄清楚。 –

相关问题