2014-10-03 35 views
1

我有一個看起來像CSV數據:總和比賽的CSV發現

17860 1 
17861 1 
17861 2 
17861 1 
17861 1 
17861 1 
17862 1 
17863 1 
17863 1 
17863 1 

我的目標是讓輸出到顯示器比賽的總和在左邊的列,得到的結果,例如:

17860 1 
17861 6 
17862 1 
17863 3 

什麼我遇到的麻煩是如何去存儲5位數字,它在列比較數據的其餘部分,然後捕獲單個位數得到的總和。

回答

4

您可以利用哈希(也就是字典中的Python)的數據結構。通讀您的文件並將第一列數字存儲爲鍵,第二列存儲爲值。如果您發現密鑰已存在,則將當前值添加到前一個值,或者添加新密鑰本身。

hash = {} 
for line in file: 
    key, value = map(int, line.split()) 
    if key in hash: 
     hash[key] += value 
    else: 
     hash[key] = value 
+0

這似乎是一個很好的開始,非常感謝! – user1764417 2014-10-03 04:35:41

0
awk '{ sum[$1] += $2 } END { for (i in sum) print i, sum[i] }' t.txt 
17862 1 
17863 3 
17860 1 
17861 6 

或許更具有可讀性,把這個文件和chmod +x它,你可以在程序運行:

#!/usr/bin/awk -f 

{ 
    sum[$1] += $2 
} 

END { 
    for (i in sum) 
    print i, sum[i] 
} 
+0

那不是python – 2014-10-03 04:18:10

+0

這是什麼?一個腳本? – Nabin 2014-10-03 04:24:46

+0

@Nabin:這是AWK語言的腳本。 OP從來沒有提到Python的問題,只在標籤中提到過。 – 2014-10-03 04:27:01