我有一个代码,在这里我需要遍历行并对索引x求和,如果它们有匹配的索引[0]。最好的解决方案是什么?我想我可以使用defaultdict,如果索引[0]中有匹配项,它会添加值。有没有一种方法可以让我一行一行地读取它,并让索引[0]始终处于临时内存中,如果它与下一个索引[0]匹配,它将进行求和?你知道吗
到目前为止,我的情况是:
with open("test.txt") as f:
dic = defaultdict(list)
for line in f:
spl =line.split("\t")
if("Fam" in line):
dic[spl[0]].append(spl[1:])
a = float(spl[5])
b = float(spl[6])
sum = a * b
output = str(sum)
this = line.strip() + "\t"+output
if("TK" in line): #I would like to start sum up after this. Read all lines that include "TK", check index[0] for matches, if match sum up.
编辑。我这样做是为了排序列表。你知道吗
提前谢谢
编辑2。既然人们对我的理解有问题,也许一些输出会有所帮助。
当前变量this
打印:
Fam_c1_1 F Extractions 02-0419 02-419TK 500 400 200000.0
Fam_c1_1 F Extractions 5107 5107TK 1475 447.5 660062.5
Fam_c10_1 F Extractions 5132 5132TK 1555 547.6 851518.0
Fam_c100_1 M Extractions 5843 5843TK 2605 398.6 1038353.0
Fam_c1000_1 F Extractions 9913 9913TK 1900 398 756200.0
Fam_c1001_1 F Extractions 9512 9512TK 1050 20 21000.0
所以在这个例子中,我希望我的代码遍历这个列表,在内存中始终有列表的第一个值。如果它与下一行的第一个值匹配,它将执行x
我提议用这样的东西:
这种方式取决于所有匹配的值已经在彼此后面。如果不是这样,
itertools.groupby()
就没用了。当然,将行拆分两次并不是最优雅的解决方案。你知道吗如果匹配的行不在后面,则需要构建一个答案的dict,然后
defaultdict
听起来合理:再说一次,只拆分一次行将是一个更优雅的解决方案。你知道吗
相关问题 更多 >
编程相关推荐