2014-10-16 78 views
0

我寫了一個mapper,打印出單詞對,每個單詞對的計數爲1。單詞對的組合計數:python

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行,想法?謝謝。

+0

每次你完成遍歷'for line in sys.stdin:','words'結束等於最後一行,並且最後一行單獨結束。那麼你的'sys.stdin'究竟是什麼樣的? – TehTris 2014-10-16 22:05:25

+0

分裂後**線**它變成**列表** – Anzel 2014-10-16 22:06:15

+0

爲什麼你在不使用'cnt'時使用'(word,cnt)'? – 2014-10-16 22:21:05

回答

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))將其刪除。

聲明:我沒有測試代碼。另外,這隻涉及你的第二個例子