迭代列表并与csv文件进行比较 - python

时间:2017-03-15 15:28:56

标签: python list csv dictionary for-loop

我有一个CSV文件,由三列组成:合作伙伴,地点和值。

合作伙伴列中有重复项,因此我将此数据排序为唯一合作伙伴名称列表:list(UNIQ)

我想找到每个合作伙伴的总价值。即从唯一合作伙伴列表中取出bob,然后进入csv文件并找到与bob关联的所有值并将它们一起添加。

然后取名字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名称的字典中。"

谢谢

2 个答案:

答案 0 :(得分: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

如果有标题行,您可以在next(EXP)循环之前使用for跳过它。

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

答案 1 :(得分:0)

使用Counter代替使用直字典,当您拨打.update()时,会自动为您添加:

from collections import Counter
PVAL = Counter()

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

# PVAL is now {'partner': 3.5}