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