我要求將其刪除。請不要編輯。python中的groupby和列表理解頭痛
回答
from collections import defaultdict
def main(separator='\t'):
data = read_mapper_output(sys.stdin, separator=separator)
counts = defaultdict(lambda: [0, 0])
for word, (count1, count2) in data:
values = counts[word]
values[0] += count1
values[1] += count2
for word, (count1, count2) in counts.iteritems():
print('{0}\t{1}\t{2}'.format(word, count1, count2))
這當然是一種有效的方法,但我的印象是,OP想要真正理解函數式編程模式和習慣用法。 –
GROUPBY
即從itertools
模塊groupby
功能,記錄here。 data
根據將itemgetter(0)
(來自operator
模塊的itemgetter
類的實例,記錄爲here)應用到每個元素的結果「分組」。它返回(關鍵結果,帶有該關鍵字的迭代器元素)對。因此,每次通過循環時,current_word
是一行data
行(索引-0,即第一項,由itemgetter
提取)共有的「單詞」,group
是data
行上的迭代器,它們開始與那word
。如您的代碼文檔中所述,文件的每一行都有兩個單詞:一個實際的「單詞」和一個計數(文本旨在解釋爲一個數字)
sum(int(count)for current_word ,計數在基)
即意味着正是它說:所述count
的整數值的總和,對於每個(current_word
,count
)一對在group
找到。如上所述,每個group
是來自data
的一組線。因此,我們採用所有以current_word
開頭的行,將其字符串count
的值轉換爲整數,然後將它們相加。
我該如何修改這個塊,使它基本上繼續做它現在做的事情,但有第二個計數器值?即輸入是(word,count1,count2),輸出是(word,count1,count2)。
那麼,您希望每個計數代表什麼,以及您希望數據來自哪裏?
我打算採取我認爲的認爲是最簡單的解釋:您要修改數據文件以在每一行上有三個項目,並且您將從每列的號碼分開。
groupby
將會是相同的,因爲我們仍然按照相同的方式對線條進行分組,我們仍然按照「單詞」對它們進行分組。
sum
部分將需要計算兩個值:第一列數字的總和和第二列數字的總和。
當我們遍歷group
時,我們會得到三個值的集合,所以我們想將它們解壓爲三個值:例如current_word, group_a, group_b
。對於其中的每一個,我們希望將整數轉換應用於每行上的兩個數字。這給了我們一串數字的序列;如果我們想要添加所有的第一個數字和所有的第二個數字,那麼我們應該製作一對數字序列。爲此,我們可以使用另一個itertools
函數,稱爲izip
。然後,我們可以分別對這些數據進行求和,將它們再次解包爲兩個單獨的數字序列變量並對它們進行求和。
這樣:
counts_a, counts_b = izip(
(int(count_a), int(count_b)) for current_word, count_a, count_b in group
)
total_a, total_b = sum(counts_a), sum(counts_b)
或者我們可以只讓一對 - 的 - 數做相同的(X對於z Y)再次招:
totals = (
sum(counts)
for counts in izip(
(int(count_a), int(count_b)) for current_word, count_a, count_b in group
)
)
雖然這一結果將是在打印聲明中使用有點困難:)
如果你指定了它失敗的原因,它會幫助我找出錯誤。 –
以上是非常有用的,但是沒有任何代碼片段真正適用於我的情況。 我編輯了我的帖子以包含更新的代碼+輸出。有任何想法嗎? –
- 1. Groupby在python的列表中
- 2. Python列表理解和SQLALCHEMY
- 3. Python中的列表理解和lambdas
- 4. 列表索引Python和列表理解
- 5. Python列表理解理解
- 6. Go列表中的Python列表理解
- 7. R列表中的Python列表理解?
- 8. Python列表理解和JSON解析
- 9. Python列表理解
- 10. Python列表理解
- 11. 列表理解python
- 12. python 2.6 vr中的列表理解和lambda表達式python 2.7
- 13. Python的CSV作家和列表理解
- 14. 列表理解(Python)的
- 15. Python列表理解,和迭代
- 16. 列表理解Python和具體項目
- 17. 正則表達式頭痛
- 18. 避免最令人頭痛的解析
- 19. AES,MySql和令人頭痛
- 20. 這個shellcode和頭痛
- 21. 解析和刺痛
- 22. Python中的列表理解函數
- 23. 在Python中的詳細列表理解
- 24. Python中的遞歸列表理解?
- 25. groupby迭代器不會添加到字典理解列表中
- 26. 加入Python列表理解
- 27. Python lambda與列表理解
- 28. 高級Python列表理解
- 29. 與Python列表理解
- 30. Python列表理解 - 簡單
並閱讀[docs](http://docs.python.org/library/itertools.html#itertools.groupby)以瞭解groupby正在做什麼不是一個選項? –