组合词对计数:python

组合词对计数:python,python,mapreduce,Python,Mapreduce,我写了一个映射器,它打印出单词对,每个单词对的计数为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 我试着写一个可以创建字典的减缩器,但

我写了一个映射器,它打印出单词对,每个单词对的计数为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

但是它说在分裂的路线上没有足够的论据,思想?多谢各位

我认为问题在于
(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))
删除它们


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

,每次您对sys.stdin:中的行进行
迭代时,
单词
最终等于最后一行,并且仅等于最后一行。那么,您的
sys.stdin
到底是什么样子的呢?拆分行后,它会变成一个列表,为什么您从不使用
cnt