我有一个由以下行组成的文本文件:
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作为条件,但我想不出另一种方法。
任何人的想法?
它可以循环完成吗?
如果我可以总结可能也会这样做的线集(但我不知道是否可以这样做)。
答案 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