簡體   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