为共享相同标识符值的行重复for循环代码

时间:2012-03-20 23:15:38

标签: python csv

我有一个由以下行组成的文本文件:

12,538123,724026,8.01  
12,538123,724026,8.5  
12,538123,724026,8.91  
34,538123,724026,8.01  
34,538123,724026,8.5  
34,538123,724026,8.91  

我有一个脚本工作,循环遍历数据,从每一行获取一个元素[-1]并将其累积到一个新列表。

我无法解决的是如何为共享相同标识符的行集(即第1行和第2行中的12行)执行此操作。

我尝试了一个嵌套的while循环,但我的问题是我的while条件是标识符值本身(即12)所以当我读入一个具有不同id的新行(例如34)时,这会改变条件while循环到新的id值。这(不出所料)导致我在一个长列表中累积每个[-1]值的列表(我的实际列表有> 200,000行)。我也在For循环中尝试了一个If语句,它也是如此。

我的问题是使用id作为条件,但我想不出另一种方法。

任何人的想法?
它可以循环完成吗? 如果我可以总结可能也会这样做的线集(但我不知道是否可以这样做)。

2 个答案:

答案 0 :(得分:1)

未测试:

from itertools import groupby
from operator import itemgetter


d = {}
with open("some_file_name", "r") as f:
    lines = (line.split(",") for line in f)
    for k, g in groupby(lines, key=itemgetter(0)):
        d[k] = [line[-1] for line in g]

根据需要添加float等。结果位于d

答案 1 :(得分:0)

您可以使用此代码:

results = {}
file = open("filename", "r")
for line in file.readlines():
    val_a, val_b, val_c, val_d = line.split(',')
    val_d = float(val_d)
    try:
        results[val_a] += val_d
    except KeyError:
        results[val_a] = val_d