2017-03-15 88 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

相关问题