繁体   English   中英

遍历列表并与CSV文件进行比较-python

[英]Iterating through a list and comparing to a csv file - python

我有一个由三列组成的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

这将返回:{'partner':'1551e96b8234','value':'0.00541867434354'}

0.00541867434354只是合作伙伴'1551e96b8234'的多个值之一。

我知道我需要使用sum函数,但无法破解。 用英语写的代码应为“对于csv文件中bob的所有实例,总结所有相关的值,并将它们添加到带有bobs名称的字典中”。

谢谢

我想这就是你想要的。 只需建立一个字典,将伙伴映射到关联值的总和即可:

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

可以使用Counter来代替直接字典,而使用Counter可以在您调用.update()时自动为您添加:

from collections import Counter
PVAL = Counter()

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

# PVAL is now {'partner': 3.5}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM