结合单词对的数量:python

时间:2014-10-16 21:58:40

标签: python mapreduce

我写了一个mapper,它打印出单词对,每个单词对的计数为1。

import sys
from itertools import tee


for line in sys.stdin:
    line = line.strip()
    words = line.split()

def pairs(lst):
    return zip(lst,lst[1:]+[lst[0]])

for i in pairs(words):
    print i,1

我尝试编写一个创建字典的缩减器,但我对如何总结它们有点困惑。

import sys

mydict = dict()
for line in sys.stdin:
    (word,cnt) = line.strip().split('\t') #\t
    mydict[word] = mydict.get(word,0)+1

for word,cnt in mydict.items():
    print word,cnt

但它说.split线上没有足够的论据,思想?谢谢。

1 个答案:

答案 0 :(得分:0)

我认为问题是(word,cnt) = line.strip().split('\t') #\t
split()方法返回一个列表,并尝试将其分配给(word, cnt),这不起作用,因为项目数量不匹配(可能有时只有一个单词) 。
也许你想使用像

这样的东西
for word in line.strip().split('\t'):
    mydict[word] = mydict.get(word, 0) + 1

如果您遇到空列表元素问题,请使用list(filter(None, list_name))删除它们。

免责声明:我没有测试代码。此外,这仅指你的第二个例子