2017-03-15 53 views
0

我有一個由三列組成的CSV文件:合作伙伴,位置和值。遍歷列表並與csv文件進行比較 - python

有在列夥伴重複,所以我整理這些數據轉化爲獨特的合夥人的名單:名單(UNIQ)

我想找到每個合作伙伴的總價值。即從獨特的合作伙伴列表中取出bob,然後進入csv文件並查找與bob相關的所有值並將它們添加在一起。

然後取名字鮑勃和總價值,並將其附加到字典。

對列表中的所有名稱重複此過程。

到目前爲止我的代碼是這樣的:

PVAL = {'partner':0, 'value':0} 

with open('/Users/tb/Desktop/data.csv', 'r') as f: 
    EXP = csv.reader(f) 
    for j in range(len(list(UNIQ))): 
     P1 = list(UNIQ)[j] 
     for row in EXP: 
      if row[0] == P1: 
       PVAL.update({'partner': row[0], 'value': row[2]}) 
print PVAL 

這將返回:{ '夥伴': '1551e96b8234', '值': '0.00541867434354'}

0.00541867434354僅僅是多個值之一爲合作伙伴'1551e96b8234'。

我知道我需要使用sum函數,但我無法破解它。 在英語中,代碼應爲「讀取csv文件中的所有bob實例」,將所有相關值彙總並將它們添加到帶有bobs名稱的字典中。「

感謝

+3

您能否提供樣本CSV文件? –

+0

每列包含數千個數據點。合作伙伴和地點的寫法如下:algkjlg8slkg099 I.e.數字和字母的混合物。和值是浮動像0.004626 – John

+1

聽起來像它會很容易提供一個六打襯裏的示例csv。考慮回答問題的人喜歡測試他們。這意味着他們必須生成文件。如果問題中的例子是減少我們需要做的工作並更好地比較答案,那麼對每個人來說都更容易。 – tdelaney

回答

0

而是使用直詞典,使用Counter,當你調用.update()將自動完成增加對你:

from collections import Counter 
PVAL = Counter() 

PVAL.update({'partner': 1}) 
PVAL.update({'partner': 2.5}) 

# PVAL is now {'partner': 3.5} 
2

我想這是你想要的。只需建立一個字典夥伴映射到相應值的總和:

from collections import defaultdict 
totals = defaultdict(float) 

with open('/Users/tb/Desktop/data.csv', 'r') as f: 
    EXP = csv.reader(f) 
    for row in EXP: 
     totals[row[0]] += float(row[2]) 
print totals 

如果有標題行,你可以只是for循環之前next(EXP)跳過它。

from collections import defaultdict 
totals = defaultdict(float) 

with open('/Users/tb/Desktop/data.csv', 'r') as f: 
    EXP = csv.reader(f) 
    headers = next(EXP) 
    for row in EXP: 
     totals[row[0]] += float(row[2]) 
print totals 
+0

這給了我:Traceback(最近呼叫最後): 文件「/Users/tb/Desktop/title.py」,第35行,在 TOTALS [row [0]] + = float(row [2]) – John

+0

如果您包含回溯中的錯誤消息,但很可能您的'值'列中至少有一個不是數字。 – Duncan

+0

哦,也許是因爲它包括標題....這顯然是一個字符串:O – John

相關問題